2011-01-03 18 views
4

私はa。*、c.name、... a.accessなどの意味を知りたいと思います。言い換えれば、ドットの前に文字を追加して、ドットのファンクションを追加すると、まさに私は何を指しているのでしょうか。mysqlの構文の説明

$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

何#__に '指すk2_items'のでしょうか? '#'はMySQLのコメント区切り文字です。私はテーブル名が文字通りSQLクエリーではないことを確信しています。 – BoltClock

+0

@Bolt:Joomlaがデータベースの接頭辞を置き換えるためのプレースホルダです。 '#__'はそのインストールのために(設定ファイルで定義されているように)格納されている接頭辞に置き換えられます... – ircmaxell

+0

@ircmaxell:おはよう、ありがとう。 – BoltClock

答えて

7

あなたはFROM句を見れば、あなたがこの参照してください。(それは何でも

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

その別名#__k2_itemsテーブル:

FROM #__k2_items as a 

をそしてLEFT JOIN句で、あなたがこれを見ます実際に呼び出された)をそれぞれa#__k2_categoriescという名前に変更しました。この場合、入力を省略してクエリの可読性を向上させるだけです。

ドットはカラム名をテーブル名に関連付けます。このため、MySQLは、クエリに関係する複数のテーブルに同じ名前のカラムがある場合に、どのテーブルを参照するかを知っています。つまり、は列の曖昧性を解決しますです。

1

彼らはテーブル名です。ここで

は、私は、この発生を発見したコードの例です。したがって、テーブル名も一致します:aは、名前が##k2_itemsと一致するすべてのテーブルです。

+0

はい、通常、誰かが7秒で私を打つ! :-) – winwaed

0

ドットの前にある単語は、その後の単語が列名です。この例では、a#__k2_items,c,#__k2_categoriesに変換されます。これは、より短い読みやすいSQLに使用されます。

0

あなたはテーブル/ビューのエイリアシングを行っています。 "FROM #__ k2_items as a"は、#_ k2_itemsが "a"エイリアスと呼ばれることを意味します。したがって、長いテーブル名を使用する必要はありません。

この:

SELECT #__k2_items.*, #__k2_categories.name as categoryname, #__k2_categories.id as categoryid, ... 
0
  • *

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

    は、このように同じことを意味している。実際にはテーブル「#でテーブルからすべてのフィールドを選択します__k2_items 'は' as 'キーワードで指定された別名を持っています。

  • c.nameと他の同様の式:テーブル 'c'からフィールド 'name'を選択します。これも表#__ k2_categoriesです。
  • c.alias as categoryalおよび他の同様の式:c.aliasのフィールド 'alias'の名前を 'categoryalias'に変更(エイリアス)します。

基本的には、すでに他の人が言ったように:テーブル名は、フィールド名の後にドットの前

  • ものは、テーブル名と何でもあります。
  • 名前を変更するための 'as'ステートメント。これは、SQLクエリの出力として便利な名前を付けるのに便利です。たとえば、2つのテーブルから2つの平均を選択することができます。そのうち1つはPhDの学生平均で、もう1つはMScの平均です。フィールドの名前を変更すると、どの平均がどのテーブルから得られたかを簡単に理解できます。
  • 多くのテーブルからフィールドを選択する場合は、構文を簡単にするために、 'a'と 'c'のようにテーブルの名前を変更します。
3

a.Somethingは、表aの列Somethingを意味する。 aにエイリアス、および#__k2_categoriescの別名になるになってきて

FROM #__k2_items as a LEFT JOIN #__k2_categories c

#__k2_items:あなたの声明では、あなたのテーブルにエイリアスを作成しました。

のでSELECT a.*, c.name as categoryname,c.id as categoryid, c.alias as categoryalias, c.params as categoryparams#__k2_categoriesから#__k2_itemsからすべてのフィールド、およびフィールドidaliasparamsを選択します。

希望に役立ちます。

-2

どのようにテーブル#の__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 SQLエスケープパラメータを気にしないためです。プレフィックスをハードコーディングする場合は-0.5。 – cHao