Mysql : select sur plusieurs tables?

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 13:30

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


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 13:35

Et fusionner tes trois tables en rajoutant un champ pour le typage ?


Marie-Aude
Modérateur
Modérateur
 
Messages: 11889
Inscription: 5 Juin 2006

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 13:51

select union devrait répondre à ton problème. mais ça bouffe de la ressource

jamalofski
WRInaute discret
WRInaute discret
 
Messages: 219
Inscription: 3 Mar 2007

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 14:39

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.

SaintAmand
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 1 Mar 2011

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 14:55

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
Modérateur
 
Messages: 11889
Inscription: 5 Juin 2006

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 15:09

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é
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 17:20

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... :wink:
Merci


Marie-Aude
Modérateur
Modérateur
 
Messages: 11889
Inscription: 5 Juin 2006

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 18:10

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

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 18:16

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
...


Marie-Aude
Modérateur
Modérateur
 
Messages: 11889
Inscription: 5 Juin 2006

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 18:37

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)

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 18:56

C'est UNION? et pas UNION ALL?

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 18:59

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 :

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>";
}

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 19:07

Ca y est, je crois que j'ai réussi... Il fallait mettre un nombre de champs égal dans le select!...


Marie-Aude
Modérateur
Modérateur
 
Messages: 11889
Inscription: 5 Juin 2006

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 19:14

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é
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Mysql : select sur plusieurs tables?

Message le Mer Juil 20, 2011 19:15

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)...

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>";
}

Mysql : select sur plusieurs tables?

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité