Intérroger +sieurs tables (nombre variable)

gismin Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

$tables= 'table1,table2 ...' : le nombre peut varier.

'SELECT nom, mail FROM' .$tables ou 'SELECT * FROM' .$tables

ne marche pas. Les tables sont toutes semblables (par ex nom et mail dans toutes).

Quelle la bonne syntaxe si c possible?

Merci

3 réponses

jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
Bonjour,

Il faut retravailler les cours de sql ;-))

select nom, mail from T1,T2
ne doit pas marcher car c'est ambigu si les champs de mêmes noms existent dans le 2 tables. Il faut préfixer les champs par le nom de table.

Et si cela marchait, il y aurait un produit cartésien des réponses. Si 10 enregistrements dans T1 et 5 dans T2 ==> réponse = 50 lignes.

La syntaxe simple c'est

select nom, mail from T1
union
select nom, mail from T2

1
gismin Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   2
 
je suis un peu imbécile et aime bien les réponses très explicites.
Par ex. 50 lignes moi pas comprendre. Pour moi à priori c'est 10+5.

Dans ma question je précise que $tables n'est pas défini , ça peut contenir 2 tables comme 10 . Et des tables différentes:
$tables='table22,table1,table80' ou ='table6,table2'
Donc si c pas possible d'interroger en 1 ligne et s'il faut faire une boucle après avoir défini le nombre de tables et leur valeur ... donc du code du code ...

ou tout rentrer dans une grosse table ... ce qui ne m'inspirait pas à cause du volume voir de la sécurité et peut être du temps de recherche (?).
0
jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
Non c'est 10 X 5. Le select sans restriction donne le produit des 2 tables. Pour avoir 15 lignes c'est l'union telle que dans mon select plus haut.

Et je pense en lisant ta dernière remarque que effectivement tu as un problème de conception de la base de données.

On ne crée pas une table chaque jour pour enregistrer, par exemple, des connexions du jour à un site. Il n'y a qu'une seule table avec toutes les connexions.

Un jour j'ai vu une table dans une base qui faisait 192 GO et des centaines de millions de lignes.

        Un étranger, c'est un ami qu'on n'a pas encore rencontré.
0