2010-04-19 5 views
2

Je viens de me rendre compte que je vais devoir commencer à aliaser mes appels de base de données en raison de la répétition des noms de colonnes dans mes tables de jointure. Est-il possible de dire automatiquement à SQL à alias tous mes noms de colonnes afin qu'ils soient retournés avec un préfixe du nom de la table? Sinon, il semble être assez déroutant lorsque seulement certains d'entre eux sont aliasés. Juste essayer d'être cohérent sans écrire des tonnes de code supplémentaire.SQL à gauche rejoint l'alias automatique?

$sql = "SELECT contracts.po_number, contracts.start_date, contracts.end_date, contracts.description, contracts.taa_required, contracts.account_overdue, jobs.id AS jobs_id, jobs.job_number, companies.id AS companies_id, companies.name AS companies_name 
    FROM contracts 
    LEFT JOIN jobs ON contracts.job_id = jobs.id 
    LEFT JOIN companies ON contracts.company_id = companies.id 
    WHERE contracts.id = '$id' 
    ORDER BY contracts.end_date"; 

Répondre

4

Non, mais vous pouvez rendre la vie un peu plus facile en utilisant des alias de table:

SELECT c.po_number, c.start_date, c.end_date, c.description, 
    c.taa_required, c.account_overdue, j.id AS jobs_id, j.job_number, 
    cm.id AS companies_id, cm.name AS companies_name 
FROM contracts c 
LEFT JOIN jobs j ON c.job_id = j.id 
LEFT JOIN companies cm ON c.company_id = cm.id 
WHERE c.id = '$id' 
ORDER BY c.end_date 
+0

Si j'alias les noms de mes tables, dois-je alias mes noms de colonnes pour les rendre uniques? – uberdanzik

+0

@Dan: Oui, vous devrez toujours, tout comme dans l'exemple ci-dessus. –

+0

cool merci pour le code d'exemple, cela le rend clair. – uberdanzik

0

vous pouvez utiliser des tables d'alias dans vos instructions SQL afin que vous devez écrire moins, mais pour accéder réellement la colonnes de php il n'y a aucun moyen de les aliaser tous, si vous voulez y accéder par leur nom.

vous pouvez également accéder à des colonnes avec des index de php, mais c'est un cauchemar d'entretien

0

Je recommande de toujours les noms de table d'alias. Cela rend très difficile à lire plus tard, si vous ignorez l'alias.

0

Pour info, Theres Gotcha dans MySQL 5.6 (peut-être d'autres!)

SELECT * FROM table1 LEFT JOIN table2 PKI = FKI

fonctionne comme prévu .. mais récemment, je mispelt « GAUCHE 'comme' LEFY 'dans une requête et cela a aussi fonctionné mais avec une jointure standard! Ainsi donc

SELECT * FROM table1 LEFY INSCRIPTION table2 PKI = FKI

fonctionne aussi très bien comme toute remplace le mot LEFY, alors méfiez-vous une faute de frappe changer votre requête !!

+0

La plupart des dbms SQL n'autorisent pas ce type d'erreur. Tout d'abord, ils risquent de générer une erreur sur les expressions de jointure telles que "pk1 = fk1" (référence de colonne ambiguë, état SQL 42702). Si vous corrigez * cela * de façon à ce qu'il indique "table1.pk1 = table2.fk1", vous obtiendrez probablement une erreur différente. Le dbms traitera "lefy" comme un alias pour la table "table1", et vous obtiendrez probablement une erreur sur une clause FROM invalide, ou quelque chose comme ça. Cela est certainement vrai pour DB2, PostgreSQL et SQL Server. Je serais surpris si d'autres dbms SQL se comportaient différemment. (Sauf MySQL, rien sur MySQL ne me surprend.) –