Mysql : select sur plusieurs tables?
31 messages
• Page 1 sur 3 • 1, 2, 3
- Recif
- WRInaute impliqué

- Messages: 816
- Inscription: 25 Aoû 2004
Mysql : select sur plusieurs tables?
Bonjour,
Voici mon souci: j'ai 2 ou trois tables avec divers articles. J'aimerai simplement faire une liste commune de tous les articles confondus, triés par date (ou par index primaire). Je trouve plein d'exemple sur le net, mais c'est à chaque fois du relationnel, donc des articles liés à un identifiant se trouvant sur une autre table, ça ne répond donc pas à mon problème...
Y a t-il une syntaxe qui existe spécifiquement pour ce problème ouo bien il faut faire un array (php) commun à toutes les tables et trier ensuite le tout?...
Merci
Voici mon souci: j'ai 2 ou trois tables avec divers articles. J'aimerai simplement faire une liste commune de tous les articles confondus, triés par date (ou par index primaire). Je trouve plein d'exemple sur le net, mais c'est à chaque fois du relationnel, donc des articles liés à un identifiant se trouvant sur une autre table, ça ne répond donc pas à mon problème...
Y a t-il une syntaxe qui existe spécifiquement pour ce problème ouo bien il faut faire un array (php) commun à toutes les tables et trier ensuite le tout?...
Merci
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
Re: Mysql : select sur plusieurs tables?
Et fusionner tes trois tables en rajoutant un champ pour le typage ?
-

Marie-Aude - Modérateur

- Messages: 11889
- Inscription: 5 Juin 2006
Re: Mysql : select sur plusieurs tables?
select union devrait répondre à ton problème. mais ça bouffe de la ressource
- jamalofski
- WRInaute discret

- Messages: 219
- Inscription: 3 Mar 2007
Re: Mysql : select sur plusieurs tables?
Pour utiliser "union" les définitions techniques des rubriques récupérés dans les select doivent être identiques entres les différentes requêtes. Si ce n'est pas le cas, il faut faire un cast sinon ça ne marchera pas.
Si tu me dis que c'est le cas, tu dois te poser la question sur le modèle de ta base et son optimisation et surtout la raison pour la quelle tu crées trois tables identiques au lieu d'utiliser une seule.
Si tu me dis que c'est le cas, tu dois te poser la question sur le modèle de ta base et son optimisation et surtout la raison pour la quelle tu crées trois tables identiques au lieu d'utiliser une seule.
- SaintAmand
- WRInaute discret

- Messages: 90
- Inscription: 1 Mar 2011
Re: Mysql : select sur plusieurs tables?
Marie-Aude a écrit:select union devrait répondre à ton problème. mais ça bouffe de la ressource
S'il n'y pas de lignes dupliquées entre les tables, un SELECT UNION ALL est bien plus rapide.
-

Marie-Aude - Modérateur

- Messages: 11889
- Inscription: 5 Juin 2006
Re: Mysql : select sur plusieurs tables?
jamalofski a écrit:Pour utiliser "union" les définitions techniques des rubriques récupérés dans les select doivent être identiques entres les différentes requêtes. Si ce n'est pas le cas, il faut faire un cast sinon ça ne marchera pas.
On peut aussi les préparer via des opérateurs dans les selects, ce qui permet d'unir des tables avec des définitions de champs différentes (mais je suis d'accord que ce n'est pas l'idéal)
- Recif
- WRInaute impliqué

- Messages: 816
- Inscription: 25 Aoû 2004
Re: Mysql : select sur plusieurs tables?
En fait j'ai trois tables avec trois métiers différents et une liste de personnes (pour la petite histoire, c'était obligatoire car chaque métier a ses spécification, et donc pas les mêmes champs). Il y a quelques champs qui ont le même nom entre les tables.
Sur la page principale j'aimerais lister les dernières personnes enregistrées mais tous métiers confondus, donc dans les trois tables.
Par contre si vous pouviez mettre un exemple ça m'arrangerais...
Merci
Sur la page principale j'aimerais lister les dernières personnes enregistrées mais tous métiers confondus, donc dans les trois tables.
Par contre si vous pouviez mettre un exemple ça m'arrangerais...
Merci
-

Marie-Aude - Modérateur

- Messages: 11889
- Inscription: 5 Juin 2006
Re: Mysql : select sur plusieurs tables?
Donc le bon modèle de données aurait été une table avec les métiers et les champs communs, et une table annexe pour les spécifs différentes.
Pour te faire ta requête (puisque c'est ça que tu demandes) il faudrait au moins que tu donnes les specs de tes tables
Pour te faire ta requête (puisque c'est ça que tu demandes) il faudrait au moins que tu donnes les specs de tes tables
- Recif
- WRInaute impliqué

- Messages: 816
- Inscription: 25 Aoû 2004
Re: Mysql : select sur plusieurs tables?
C'est plus complexe que ça pour la structure, mais je ne souhaite pas entrer dans les détails, il faut se dire que c'est infaisable.
Pour deux tables tables:
Metier 1
id
nom
prenom
critere1
date
Metier 2
id
nom
prenom
critere2
date
J'aimerais avoir la liste des derniers enregistrements triés par date, mais les deux tables confondues...
- nom / prenom / date
- nom / prenom / date
...
Pour deux tables tables:
Metier 1
id
nom
prenom
critere1
date
Metier 2
id
nom
prenom
critere2
date
J'aimerais avoir la liste des derniers enregistrements triés par date, mais les deux tables confondues...
- nom / prenom / date
- nom / prenom / date
...
-

Marie-Aude - Modérateur

- Messages: 11889
- Inscription: 5 Juin 2006
Re: Mysql : select sur plusieurs tables?
SELECTnom AS LENOM, prenom AS LEPRENOM, date AS LADATE from metier 1
UNION SELECT nom AS LENOM, prenom AS LEPRENOM, date AS LADATE from metier 2
ORDER BY LADATE DESC
(bon bien sûr tu n'as pas mis date comme nom de champs mais autre chose)
UNION SELECT nom AS LENOM, prenom AS LEPRENOM, date AS LADATE from metier 2
ORDER BY LADATE DESC
(bon bien sûr tu n'as pas mis date comme nom de champs mais autre chose)
- Recif
- WRInaute impliqué

- Messages: 816
- Inscription: 25 Aoû 2004
Re: Mysql : select sur plusieurs tables?
J'ai essayé avec UNION mais j'ai un message d'erreur
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...
requete en php :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...
requete en php :
- Code: Tout sélectionner
$result = mysql_query("select id as IDALL from metier1 UNION
select id as IDALL, prenom as PRENOM from metier2 order by IDALL DESC");
while($row = mysql_fetch_array($result)) {
echo "$row[0]<br>";
}
-

Marie-Aude - Modérateur

- Messages: 11889
- Inscription: 5 Juin 2006
Re: Mysql : select sur plusieurs tables?
Ben oui, je me suis cassée à te donner la structure exacte que tu voulais
(qui soit dit en passant ne correspond pas à ce que tu as fait)
- Recif
- WRInaute impliqué

- Messages: 816
- Inscription: 25 Aoû 2004
Re: Mysql : select sur plusieurs tables?
Bon ben j'y arrive pas... Je demande pas le même nombre de champs dans les deux tables, j'ai aucun resultat...
(j'ai pas mis tous les champs, il y en a une bonne quinzaine dans chaque table)...
(j'ai pas mis tous les champs, il y en a une bonne quinzaine dans chaque table)...
- Code: Tout sélectionner
$result = mysql_query("select id as IDALL, prenom as PRENOM, critere1 as CRITERE from metier1 UNION
select id as IDALL, prenom as PRENOM, critere2 as CRITERE from metier2 order by IDALL DESC");
while($row = mysql_fetch_array($result)) {
echo "$row[0] - $row[1] - $row[2]<br>";
}
31 messages
• Page 1 sur 3 • 1, 2, 3
Lectures recommandées sur ce thème :
- [MySQL] : select de 2 tables et mysql_fetch_assoc
- [MySQL] Requête SELECT entre 3 tables liées
- [PHP/SQL] Associer plusieurs SELECT de tables MySQL
- Tables MySQL corrompues
- Tables MySQL liées
- Mysql sum sur 2 tables
- Fusionner deux tables mysql
- Taille des tables MySQL
- [Résolu] MySQL lier 2 tables
- Select where MYSQL
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
