2011-09-23 3 views
4

i ont un problème pour comprendre ce qui se passe dans cette requête:abréviations dans mysql select, que signifient-ils?

$db->select("select r.id, m.mailing_id, r.email, 
m.done from lp_relations r, lp_mailings_relations m 
where m.relation_id=r.id and m.mailing_id=? order by r.name", 
$rs[$i]["id"] 

son sur les lettres r. et m. avant le fieldnamesthese, ce ne sont pas des noms de tables, mais je suspecte des abréviations de certaines sortes de jointures, mais je ne les ai jamais vues auparavant.

Je peux réécrire ma propre requête pour faire le travail, mais je voudrais savoir ce que cela signifie, je peux donc aborder le problème lui-même (mailing envoyé deux fois)

Merci d'avance pour toute aide!

Répondre

10

Regardez FROM lp_relations r, lp_mailings_relations m.
Après de vrais noms de tables, vous trouvez un nouveau nom, utilisé pour rendre la partie SELECT plus courte et plus facile à lire.
Donc la table lp_relations devient r et la table lp_mailings_relations devient m!

Vous pouvez écrire:

SELECT r.id, r.email, m.mailing_id, m.done 
FROM lp_relations r INNER JOIN lp_mailings_relations m 
ON m.relation_id=r.id 
WHERE m.mailing_id=? 
ORDER BY r.name 
1

r signifie la table lp_relations et m représente la table lp_mailings_relations. Les alias vous aident à faire des jointures en séparant les champs. Par exemple, si vous avez une table users ayant le même nom de champ trouvé dans une table de produits, les alias permettent de le séparer (non ambigu).

1

Ce sont des "alias" de noms de tables. Notez comment dans votre requête vous dites "from lp_relations r..."? Le "r" à la fin de cela est aliasé à lp_relations maintenant. Vous pouvez donc vous référer à lp_relations dans cette requête avec juste "r". C'est un raccourci pour rendre les choses un peu plus lisibles.