mysql语法解释

时间:2011-01-03 16:32:00

标签: sql mysql syntax

我想知道a。*,c.name,... a.access等意味着什么。换句话说,当我在点和点的功能之前添加一个字母时,我到底指的是什么。

以下是我发现此事件的代码示例:

$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"
        ;

7 个答案:

答案 0 :(得分:7)

如果查看FROM子句,您会看到:

FROM #__k2_items as a

LEFT JOIN子句中,您会看到:

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

别名 #__k2_items表(无论它真正被称为)表分别为a#__k2_categoriesc。在这种情况下,它只是为了节省输入并提高查询的可读性,实际上。

dot将列名与表名相关联,以便MySQL知道要查找哪些表,以防查询中涉及多个表中的同名列。也就是说,它解决了列歧义

答案 1 :(得分:3)

a.Something表示表Something中的列a。在您的语句中,您在表上创建了别名:

FROM #__k2_items as a LEFT JOIN #__k2_categories c

#__k2_items变为a的别名,#__k2_categories变为c的别名。

因此,SELECT a.*, c.name as categoryname,c.id as categoryid, c.alias as categoryalias, c.params as categoryparams将从#__k2_items中选择所有字段,从id中选择字段aliasparams#__k2_categories

希望有所帮助。

答案 2 :(得分:1)

它们是表名。所以你也匹配表名:a是所有名称都匹配#__ k2_items

的表

答案 3 :(得分:0)

点之前的单词是表名,后面的单词是列名。在此示例中,a转换为#__k2_itemsc转换为#__k2_categories。这用于更短且更易读的SQL。

答案 4 :(得分:0)

您正在对表/视图进行别名处理。 “FROM #__ k2_items as”表示#__ k2_items将被称为“a”别名,因此您不必使用长表名。

此:

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

与此相同:

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

答案 5 :(得分:0)

  • a。* :选择表a中的所有字段,实际上是“#__ k2_items”表,其中“as”关键字指定了不同的别名。
  • c.name 以及其他类似的表达式:从表'c'中选择字段'name',这又是表#__ k2_categories。
  • c.alias as categoryalias 以及其他类似的表达式:将c.alias中的字段'alias'重命名(别名)为'categoryalias'。

基本上,正如其他人已经说过的那样:

  • 点之前的任何内容都是表名,表名之后的任何内容都是字段名称。
  • 用于更改名称的“as”语句。这对于将有用的名称用作SQL查询的输出很有用。例如,您可能从两个表中选择两个平均值,其中一个是博士生平均值,另一个是MSc学生平均值,因此您可以更改字段的名称,以便更容易理解哪个平均值来自哪个表。
  • 有时为了使语法更简单,特别是在从多个表中选择字段时,您可以像对'a'和'c'一样重命名表。

答案 6 :(得分:-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();