2011-01-03 6 views
4

Je voudrais savoir ce que le a. *, C.name, ... a.access signifie. En d'autres termes, de quoi je parle exactement quand j'ajoute une lettre avant le point et la fonction du point.mysql syntax explication

Voici un exemple de code où je trouve cet événement:

$query = "SELECT a.*, c.name as categoryname,c.id as categoryid, ". 
     "c.alias as categoryalias, c.params as categoryparams". 
     " FROM #__k2_items as a". 
     " LEFT JOIN #__k2_categories c ON c.id = a.catid"; 

     $query .= " WHERE a.published = 1" 
     ." AND a.access <= {$aid}" 
     ." AND a.trash = 0" 
     ." AND c.published = 1" 
     ." AND c.access <= {$aid}" 
     ." AND c.trash = 0" 
     ; 
+0

Qu'est-ce que '#__ k2_items' référence? '#' est un délimiteur de commentaire MySQL, je suis à peu près sûr que le nom de la table n'est pas censé être littéralement dans la requête SQL. – BoltClock

+0

@Bolt: Joomla remplace le préfixe de la base de données. '#__' est remplacé par le préfixe stocké pour cette installation (comme défini dans le fichier de configuration) ... – ircmaxell

+0

@ircmaxell: Ooh, merci. – BoltClock

Répondre

7

Si vous regardez la clause FROM, vous voyez ceci:

FROM #__k2_items as a 

Et dans la clause LEFT JOIN, vous voyez ceci:

LEFT JOIN #__k2_categories c ON c.id = a.catid 

Que alias la table #__k2_items (quoi que c'est vraiment appelé) au nom a, et #__k2_categories à c, respectivement. Dans ce cas, c'est juste pour sauver la saisie et améliorer la lisibilité de la requête, vraiment. Le point associe un nom de colonne à un nom de table afin que MySQL sache quelles tables consulter, au cas où vous auriez des colonnes du même nom dans plus d'une table impliquée dans la requête. En d'autres termes, il résout l'ambiguïté de colonne.

1

Ce sont des noms de table. Vous associez également des noms de tables: a est toutes les tables dont le nom correspond à #__ k2_items

+0

Oui habituellement quelqu'un me bat de sept secondes! :-) – winwaed

0

Le mot précédant le point est le nom de la table, le mot après le nom de la colonne. Dans cet exemple, a est converti en #__k2_items, c en #__k2_categories. Ceci est utilisé pour un SQL plus court et plus lisible.

0

Vous aliasez vos tables/vues. "FROM #__ k2_items as a" signifie que les ## k2_items seront connus comme un "a" alias, donc vous n'aurez pas besoin d'utiliser de longs noms de tables.

Ce:

SELECT a.*, c.name as categoryname,c.id as categoryid, ... 

signifie la même chose que ceci:

SELECT #__k2_items.*, #__k2_categories.name as categoryname, #__k2_categories.id as categoryid, ... 
0
  • a *:. Sélectionner tous les champs de la table a, qui est en fait les tables de la # __k2_items 'ayant un alias différent spécifié par le mot clé' as '.
  • c.nom et les autres expressions similaires: sélectionnez le champ 'nom' de la table 'c', qui est à nouveau la table #__ k2_categories.
  • c.alias comme categoryalias et les autres expressions similaires: renommer (aliasing) le champ 'alias' dans c.alias à 'categoryalias'.

En fait, comme d'autres déjà dit:

  • quoi que ce soit avant le point est le nom de la table et rien après le nom de la table est le nom du champ.
  • L'instruction 'as' utilisée pour changer le nom. Cela est utile pour avoir un nom utile en tant que résultat de la requête SQL.Par exemple, vous pouvez sélectionner deux moyennes à partir de deux tables, l'une est la moyenne des doctorants et l'autre est la moyenne des étudiants MSc, vous pouvez donc changer le nom des champs pour faciliter la compréhension de la moyenne de quelle table. Parfois, pour simplifier la syntaxe, en particulier lorsque vous sélectionnez des champs dans plusieurs tables, vous renommez une table comme vous l'avez fait pour 'a' et 'c'.
3

a.Something signifie que la colonne Something dans le tableau a. Dans votre déclaration, vous avez créé des alias sur vos tables:

FROM #__k2_items as a LEFT JOIN #__k2_categories c

#__k2_items devenir à a un alias et #__k2_categories devenir à c un alias.

Ainsi SELECT a.*, c.name as categoryname,c.id as categoryid, c.alias as categoryalias, c.params as categoryparams sélectionnera tous les champs de #__k2_items, et les champs id, alias et params de #__k2_categories.

Espérons que ça aide.

-2

Comment insérer un enregistrement dans la table # __k2_items:

$db = &JFactory::getDBO(); 

$query = "INSERT INTO jos_k2_items (`title`, `alias`, `catid`, `published`, 
     `introtext`, `fulltext`, `video`, `gallery`, `extra_fields`, 
     `extra_fields_search`, `created`, `created_by`, `created_by_alias`, 
     `checked_out`, `checked_out_time`, `modified`, `modified_by`, 
     `publish_up`, `publish_down`, `trash`, `access`, `ordering`, `featured`, 
     `featured_ordering`, `image_caption`, `image_credits`, `video_caption`, 
     `video_credits`, `hits`, `params`, `metadesc`, `metadata`, `metakey`, 
     `plugins`) 
     VALUES 
     ('".$title."', '".$title."', ".$catid.", 0, '<p>".$introtext."</p>', 
      '', NULL, NULL, '".$extra_fields."', 'extra_fields_search', now(), 62, 
      '', 0, '0000-00-00 00:00:00', '', 62, '', '0000-00-00 00:00:00', 0, 0, 
      5, 0, 0, '', '', '', '', 0, '', '', 'robots=\nauthor=', '', '') 
"; 

$db->setQuery($query); 
$db->query(); 
+0

-0.5 pour ne pas déranger les paramètres d'échappement SQL. -0,5 pour coder en dur le préfixe. – cHao