SQL Select * à partir de plusieurs tables
À l'aide de PHP/PDO/MySQL est-il possible d'utiliser un caractère générique pour les colonnes lorsqu'une sélection est effectuée sur plusieurs tables et le retour des clés du tableau sont pleinement qualifiés pour éviter le nom de la colonne de choc?
exemple:
SELECT * from table1, table2;
donne:
Clés du tableau sont " table1.id', 'table2.id', 'table1.nom", etc.
J'ai essayé "SELECT table1.*,table2.* ..." mais le retour de la matrice de touches ne sont pas pleinement qualifiés afin de colonnes avec le même nom se sont affrontés et ont été remplacées.
source d'informationauteur zaf
Vous devez vous connecter pour publier un commentaire.
Oui, vous le pouvez. La façon la plus simple est avec pdo, bien qu'il y ait au moins quelques autres extensions qui en sont capables.
aop
Définir l'attribut sur la AOP objet, pas le PDOStatment.
Que c'est. Ensuite, vous obtenez un tableau associatif des touches de
$row['myTable.myColumn']
. Cela fonctionne si vous chercher un objet (par exemple viaPDO::FETCH_OBJECT
) alors méfiez-vous, parce que vous avez besoin pour accéder aux propriétés comme$obj->{'myTable.myColumn'}
*La manuel dit la
PDO::ATTR_FETCH_TABLE_NAMES
attribut est pris en charge uniquement par certains conducteurs. Si le ci-dessus ne fonctionne pas, ce pourrait travail à la place.Même motif de base est utilisé pour d'autres extensions des bases de données
mysql
mysqli
Cela devrait également travailler avec des alias de table (testé en php 7.1) - le qualifié nom de la colonne va utiliser l'alias de la table.
vous pouvez faire ceci:
où vous aurez toutes les colonnes d'un tableau à l'aide de "*" et puis juste les colonnes de la table dont vous avez besoin, il n'y a pas de choc.
Vous pouvez également utiliser des alias de colonne, où l'on "renommer" une colonne:
votre résultat serait de colonnes T1_A et T2_A
Malheureusement, non, il n'y a pas de syntaxe SQL pour s'assurer que les noms de colonnes sont uniques.
Si vous ne connaissez pas les noms des colonnes et doivent utiliser
SELECT *
votre seule option serait de revenir à une très laid à la recherche du SQL dynamique pourrait inspecter la structure des tables et de générer une requête qui doit les sélectionner tous explicitement à une table d'un préfixe de nom.Je ne sais pas qui SGBD que vous utilisez, mais quelque chose comme cela doit fonctionner sur SQL Server:
Sans vergogne reconditionné à partir de @chèvre:
REMARQUE: si vous utilisez:
alors vous obtiendrez
my_table
. J'aurais espérémy_table_alias
. J'ai obtenu ce résultat avec PHP 5.6 et driver sqlite.Malheureusement, PHP (en particulier la base de données MySQL, PgSQL, MSSQL extensions) qui permettra de toujours avoir vos colonnes remplacer dans le cas de chevauchement.
Je recommande la création d'un
View
dans votre base de données, et Alias de colonnes, de sorte qu'ils sont "complet".Par exemple: (MySQL)
La syntaxe peut être pas parfait, mais vous pouvez obtenir une idée générale de ce que je suis en train de parler.