Requete sql sur plusieurs tables avec nom de la table

Requete sql sur plusieurs tables avec nom de la table - PHP - Programmation

Marsh Posté le 26-11-2004 à 22:14:25    

Bonsoir,
 
J'aurais besoin de vos lumières.
Je m'explique, je voudrais afficher les resultats d'une requete sql s'executant sur plusieurs tables, tout en sachant pour chaque resultat de quelle table il provient.
 
Voici mon code:
 

Code :
  1. <?
  2. $id_membre1="55";
  3. $req="(SELECT id FROM $table1 WHERE id_membre =  \"$id_membre1\" ORDER BY date DESC LIMIT 0, 10)
  4. UNION ALL
  5. (SELECT id FROM $table2 WHERE id_membre =  \"$id_membre1\" ORDER BY date DESC LIMIT 0, 10)
  6. ORDER BY date DESC LIMIT 0, 20;
  7. ";
  8. $idreq=mysql_query($req);
  9. while ($row=mysql_fetch_array($idreq))
  10. {
  11. ?>
  12. du html
  13. <? $num = $row[id];
  14. //JE VOUDRAIS SAVOIR LE NOM DE LA TABLE QUI CONTIENT CE NUMERO
  15. ?>
  16. du html
  17. <? } ?>


 
 
Quelqun aurait-il une idée?


Message édité par mikedundee le 26-11-2004 à 22:17:27
Reply

Marsh Posté le 26-11-2004 à 22:14:25   

Reply

Marsh Posté le 26-11-2004 à 22:34:13    

Hmm...
 
Je ferais :

Code :
  1. SELECT id, 'table1' nomtable FROM...
  2. UNION
  3. SELECT id, 'table2' nomtable FROM...


 
Il y a peut-être mieux cela dit.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 26-11-2004 à 23:42:22    

Merci de ta reponse mais j'ai du mal m'expliquer.
 
Je sais le nom de $table1 et $table2 au moment du select. Je voudrais le connaitre au moment de la ligne qui est en vert dans mon premier post.
 
Voila j'espere que c'est moins confu.

Reply

Marsh Posté le 27-11-2004 à 00:10:19    

pourquoi ne pas faire de requete separée ?  

Reply

Marsh Posté le 27-11-2004 à 00:29:06    

fb@alphalog a écrit :

pourquoi ne pas faire de requete separée ?


 
 
Pour classer les resultats par date et non pas par table.
Sinon il va me sortir tous les resultats de la table1 classés puis ceux de la table2 classés.


Message édité par mikedundee le 27-11-2004 à 00:31:32
Reply

Marsh Posté le 27-11-2004 à 08:39:23    

MikeDundee a écrit :

Merci de ta reponse mais j'ai du mal m'expliquer.
 
Je sais le nom de $table1 et $table2 au moment du select. Je voudrais le connaitre au moment de la ligne qui est en vert dans mon premier post.
 
Voila j'espere que c'est moins confu.


 
Ben avec ce que je t'ai donné tu n'as qu'à vérifier $req['nomtable'] pour avoir le nom de la table associée à l'id. :o


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-11-2004 à 12:50:15    

Sielfried a écrit :

Ben avec ce que je t'ai donné tu n'as qu'à vérifier $req['nomtable'] pour avoir le nom de la table associée à l'id. :o


 
 
Excuse moi mais j'ai pas tres bien compris.
Tu pourrais me montrer un exemple?

Reply

Marsh Posté le 27-11-2004 à 12:54:08    

Bien sûr :
 

Code :
  1. <?
  2. $id_membre1="55";
  3. $req="(SELECT id, $table1 nomtable FROM $table1 WHERE id_membre =  \"$id_membre1\" ORDER BY date DESC LIMIT 0, 10)
  4. UNION ALL
  5. (SELECT id, $table2 nomtable FROM $table2 WHERE id_membre =  \"$id_membre1\" ORDER BY date DESC LIMIT 0, 10)
  6. ORDER BY date DESC LIMIT 0, 20;
  7. ";
  8. $idreq=mysql_query($req);
  9. while ($row=mysql_fetch_array($idreq))
  10. {
  11. ?>
  12. du html
  13. <? $num = $row[id];
  14. //JE VOUDRAIS SAVOIR LE NOM DE LA TABLE QUI CONTIENT CE NUMERO
  15. $nom_de_la_table_qui_contient_ce_numero = $row['nomtable'];
  16. ?>
  17. du html
  18. <? } ?>


Message édité par sielfried le 27-11-2004 à 12:55:27

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-11-2004 à 13:32:27    

Merci Sielfried mais j'ai un probleme.
Ma version de mysql ne doit pas accepter les requetes du type:

Code :
  1. SELECT id, $table1 nomtable FROM $table1


puisqu'elle ne me renvoie aucun resultat.
 
J'utilise MySQL 4.0.22, c'est normal?

Reply

Marsh Posté le 27-11-2004 à 14:15:36    

J'ai fait une erreur effectivement : rajoute des ' autour de $table1 et $table2 (ceux que j'ai rajoutés) dans les deux SELECT.


Message édité par sielfried le 27-11-2004 à 14:15:55

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-11-2004 à 14:15:36   

Reply

Marsh Posté le 27-11-2004 à 14:44:38    

Maintenant il me liste les 10 premier résultats qui sont dans $table1 mais pas ceux de $table2 (alors qu'il y en a).
 
Autre chose une requete de ce style:

Code :
  1. $req="(SELECT id, '$table1' nomtable FROM $table1 WHERE id_membre =  \"$id_membre1\" ORDER BY date DESC LIMIT 0, 10)
  2. UNION ALL
  3. (SELECT id, '$table2' nomtable FROM $table2 WHERE id_membre =  \"$id_membre1\" ORDER BY date DESC LIMIT 0, 10)
  4. ORDER BY date DESC LIMIT 0, 20;
  5. ";


ne me donne aucun résultats
 
alors que:

Code :
  1. $req="(SELECT id, '$table1' nomtable FROM $table1 WHERE id_membre =  \"$id_membre1\" ORDER BY date DESC LIMIT 0, 10)
  2. UNION ALL
  3. (SELECT id, '$table2' nomtable FROM $table2 WHERE id_membre =  \"$id_membre1\" ORDER BY date DESC LIMIT 0, 10)
  4. ";


m'en donne.
 
Donc meme si je fais marcher ta requete comment classer les resultats?


Message édité par mikedundee le 27-11-2004 à 14:46:31
Reply

Marsh Posté le 27-11-2004 à 14:58:10    

Je vois pas très bien où ça peut déconner là. Tu es sûr que $table1 et $table2 sont bien définis ?
 
Fais un echo $req avant de l'envoyer au serveur et recopie ici ce que ça te sort, histoire déjà de voir si ça vient pas du PHP.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-11-2004 à 15:26:37    

$table1 et $table2 sont bien définis.
 
echo $req me renvoie:
 

Code :
  1. (SELECT id, 'eleves2' nomtable FROM eleves2 WHERE id_membre = "11" ORDER BY date DESC LIMIT 0, 10) UNION ALL (SELECT id, 'profess2' nomtable FROM profess2 WHERE id_membre = "11" ORDER BY date DESC LIMIT 0, 10)
  2. Table 'mysql.profess' doesn't exist


Message édité par mikedundee le 27-11-2004 à 15:27:12
Reply

Marsh Posté le 27-11-2004 à 16:03:17    

MikeDundee a écrit :

$table1 et $table2 sont bien définis.
 
echo $req me renvoie:
 

Code :
  1. (SELECT id, 'eleves2' nomtable FROM eleves2 WHERE id_membre = "11" ORDER BY date DESC LIMIT 0, 10) UNION ALL (SELECT id, 'profess2' nomtable FROM profess2 WHERE id_membre = "11" ORDER BY date DESC LIMIT 0, 10)
  2. Table 'mysql.profess' doesn't exist




 
"Table 'mysql.profess' doesn't exist" ?
 
Sinon, la requête me semble bonne, je viens de tester à l'instant sur ma base une requête du genre et ça me sort exactement les id des deux tables avec leur noms dans la colonne 'nomtable'. [:spamafote]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-11-2004 à 16:07:10    

Sielfried a écrit :

"Table 'mysql.profess' doesn't exist" ?


 
C'est bizare ma table s'appelle profess2 pas profess et elle existe.
Peut etre qu'a ce niveau mysql ne prend pas en compte les chiffres dans le nom des tables

Reply

Marsh Posté le 27-11-2004 à 16:57:43    

J'ai essayer avec une autre table où il n"y a pas de chiffre et ca marche pas non plus.
 
ca me met:

Code :
  1. "Table 'mysql.(nom de ma table avec la derniere lettre en moins)' doesn't exist"


 
Sinon t'a une idee pour classer les resultats suivant la date et pas la table car le  ORDER BY date DESC LIMIT 0, 10 apres les 2 select ne fonctionne pas ?


Message édité par mikedundee le 27-11-2004 à 16:58:26
Reply

Marsh Posté le 27-11-2004 à 17:50:50    

MikeDundee a écrit :

J'ai essayer avec une autre table où il n"y a pas de chiffre et ca marche pas non plus.
 
ca me met:

Code :
  1. "Table 'mysql.(nom de ma table avec la derniere lettre en moins)' doesn't exist"




 
Alors là. [:wam]  
 

Citation :

Sinon t'a une idee pour classer les resultats suivant la date et pas la table car le  ORDER BY date DESC LIMIT 0, 10 apres les 2 select ne fonctionne pas ?


 
Franchement, non, chez moi ça marche avec le même type de requêtes donc je vois vraiment pas ce qui peut bloquer. Sinon balance ton schéma exact de tables (exporte au format texte), j'essaierai exactement la même requête pour voir.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-11-2004 à 18:15:53    

Merci mais je pense que sa vient de ma version de mysql ou de php.
 
J'utilise WAMP5 je vais essayer avec d'autres versions.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed