Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1303 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Requete sql sur plusieurs tables avec nom de la table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete sql sur plusieurs tables avec nom de la table

n°908873
mikedundee
Posté le 26-11-2004 à 22:14:25  profilanswer
 

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
mood
Publicité
Posté le 26-11-2004 à 22:14:25  profilanswer
 

n°908889
sielfried
Posté le 26-11-2004 à 22:34:13  profilanswer
 

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
n°908937
mikedundee
Posté le 26-11-2004 à 23:42:22  profilanswer
 

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.

n°908957
fb@alphalo​g
Posté le 27-11-2004 à 00:10:19  profilanswer
 

pourquoi ne pas faire de requete separée ?  

n°908976
mikedundee
Posté le 27-11-2004 à 00:29:06  profilanswer
 

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
n°909028
sielfried
Posté le 27-11-2004 à 08:39:23  profilanswer
 

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
n°909105
mikedundee
Posté le 27-11-2004 à 12:50:15  profilanswer
 

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?

n°909106
sielfried
Posté le 27-11-2004 à 12:54:08  profilanswer
 

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
n°909112
mikedundee
Posté le 27-11-2004 à 13:32:27  profilanswer
 

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?

n°909133
sielfried
Posté le 27-11-2004 à 14:15:36  profilanswer
 

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
mood
Publicité
Posté le 27-11-2004 à 14:15:36  profilanswer
 

n°909148
mikedundee
Posté le 27-11-2004 à 14:44:38  profilanswer
 

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
n°909151
sielfried
Posté le 27-11-2004 à 14:58:10  profilanswer
 

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
n°909164
mikedundee
Posté le 27-11-2004 à 15:26:37  profilanswer
 

$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
n°909177
sielfried
Posté le 27-11-2004 à 16:03:17  profilanswer
 

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
n°909179
mikedundee
Posté le 27-11-2004 à 16:07:10  profilanswer
 

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

n°909197
mikedundee
Posté le 27-11-2004 à 16:57:43  profilanswer
 

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
n°909253
sielfried
Posté le 27-11-2004 à 17:50:50  profilanswer
 

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
n°909264
mikedundee
Posté le 27-11-2004 à 18:15:53  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Requete sql sur plusieurs tables avec nom de la table

 

Sujets relatifs
Aider moi pour une requeteRequête spéciale
[MYSQL] Requete multi base de donnéesSe connecter a plusieurs database a la fois
[MYSQL]requete selective distingantePb delphi : Quick Report sur plusieurs groupements
Comment executer une requete SQL avec VB6 ?Newbie : Plusieurs appli pour une seule base MySQL ?
Rêquete imbriqué avec MySQLRequete ACCESS pour conserver la plus haute note
Plus de sujets relatifs à : Requete sql sur plusieurs tables avec nom de la table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR