2011-01-03 10 views
4

Ich würde gerne wissen, was die a. *, C.name, ... a.access etc bedeutet. Mit anderen Worten, was genau beziehe ich, wenn ich einen Buchstaben vor dem Punkt und die Funktion des Punktes hinzufüge. Hiermysql Syntax Erklärung

ist ein Beispiel für Code, wo ich dieses Vorkommen gefunden:

$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

Was 'nicht #__ k2_items' beziehen? '#' ist ein Trennzeichen für MySQL-Kommentare. Ich bin ziemlich sicher, dass der Tabellenname nicht in der SQL-Abfrage enthalten sein soll. – BoltClock

+0

@Bolt: Es ist ein Platzhalter für Joomla, um das Präfix für die Datenbank zu ersetzen. '#__' wird durch das gespeicherte Präfix für diese Installation ersetzt (wie in der Konfigurationsdatei definiert) ... – ircmaxell

+0

@ircmaxell: Ooh, danke. – BoltClock

Antwort

7

Wenn man sich die FROM Klausel sehen, Sie sehen:

FROM #__k2_items as a 

Und in der LEFT JOIN Klausel, Sie sehen:

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

Das Aliase die #__k2_items Tisch (was auch immer es ist wirklich genannt) auf den Namen a bzw. #__k2_categories bis c. In diesem Fall ist es einfach, Tipparbeit zu sparen und die Lesbarkeit der Abfrage zu verbessern.

Der Punkt ordnet einem Tabellennamen einen Spaltennamen zu, sodass MySQL weiß, in welche Tabellen gesucht werden soll, falls Sie Spalten mit demselben Namen in mehr als einer Tabelle haben, die an der Abfrage beteiligt ist. Das heißt, es löst die Mehrdeutigkeit der Spalte.

1

Sie sind Tabellennamen. Sie stimmen also auch mit Tabellennamen überein: a ist alle Tabellen mit einem passenden Namen #__ k2_items

+0

Ja normalerweise schlägt mich jemand um sieben Sekunden! :-) – winwaed

0

Das Wort vor dem Punkt ist der Tabellenname, das Wort dahinter ist der Spaltenname. In diesem Beispiel wird a in #__k2_items, c in #__k2_categories umgewandelt. Dies wird für kürzere und besser lesbare SQL verwendet.

0

Sie Aliasing Ihre Tabellen/Ansichten. "FROM #__ k2_items as a" bedeutet, dass die #__ k2_items als "a" Alias ​​bekannt sind, so dass Sie keine langen Tabellennamen verwenden müssen.

Dieses:

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

bedeutet dasselbe wie folgt aus:

SELECT #__k2_items.*, #__k2_categories.name as categoryname, #__k2_categories.id as categoryid, ... 
0
  • a *:. Wählen Sie alle Felder aus der Tabelle ein, die eigentlich die #‘Tabellen __k2_items haben einen anderen Alias, der mit dem Schlüsselwort 'as' angegeben wird.
  • c.name und die anderen ähnlichen Ausdrücke: Wählen Sie das Feld 'Name' aus der Tabelle 'c', die wiederum die Tabelle #__ k2_categories ist.
  • c.alias als Kategoriealias und die anderen ähnlichen Ausdrücke: Umbenennung (Alias) das Feld 'Alias' in c.alias zu 'Kategoriealias'.

Grundsätzlich wie andere schon gesagt:

  • etwas vor dem Punkt ist der Tabellenname und alles, was nach dem Tabellennamen der Feldname ist.
  • Die 'as' Anweisung, die verwendet wurde, um den Namen zu ändern. Dies ist nützlich, um einen nützlichen Namen als Ausgabe der SQL-Abfrage zu haben.Zum Beispiel können Sie zwei Durchschnittswerte aus zwei Tabellen auswählen, einer davon ist der Durchschnitt der Doktoranden und der andere ist der MSc-Student-Durchschnitt. Sie können also den Namen der Felder ändern, um besser zu verstehen, welcher Durchschnitt aus welcher Tabelle ist.
  • Manchmal, um die Syntax zu vereinfachen, besonders wenn Sie Felder aus vielen Tabellen auswählen, benennen Sie eine Tabelle wie für 'a' und 'c' um.
3

a.Something bedeutet die Spalte in der Tabelle Somethinga. In Ihrer Erklärung, erstellt Sie Aliase auf Tabellen:

FROM #__k2_items as a LEFT JOIN #__k2_categories c

#__k2_items immer aliased zu a und #__k2_categories immer zu c aliased.

So SELECT a.*, c.name as categoryname,c.id as categoryid, c.alias as categoryalias, c.params as categoryparams wählt alle Felder aus #__k2_items, und die Felder id, alias und params von #__k2_categories.

Hoffe, dass hilft.

-2

wie ein Datensatz in die Tabelle # __k2_items einzufügen:

$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 für nicht stören zu SQL-escape-params. -0,5 für die Festcodierung des Präfixes. – cHao