объяснение синтаксиса mysql - PullRequest
4 голосов
/ 03 января 2011

Я хотел бы знать, что означает 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 ]

7 голосов
/ 03 января 2011

Если вы посмотрите на предложение FROM, вы увидите следующее:

FROM #__k2_items as a

А в предложении LEFT JOIN вы увидите следующее:

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

То aliases таблица #__k2_items (как она на самом деле называется) с именем a и #__k2_categories до c соответственно.В данном случае это просто для того, чтобы просто сохранить ввод и улучшить читаемость запроса.

Точка связывает имя столбца с именем таблицы, чтобы MySQL знал, какие таблицы искать, если у вас есть столбцыодно и то же имя в нескольких таблицах, участвующих в запросе.То есть он разрешает неоднозначность столбца .

3 голосов
/ 03 января 2011

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, alias и params из #__k2_categories.

Надеюсь, это поможет.

1 голос
/ 03 января 2011

Это имена таблиц.Таким образом, вы также сопоставляете имена таблиц: a - это все таблицы, имена которых соответствуют #__ k2_items

0 голосов
/ 28 октября 2011

Как вставить запись в таблицу # __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 голосов
/ 03 января 2011
  • a. *: выберите все поля из таблицы a, которая фактически является таблицей '#__ k2_items', имеющей другой псевдоним, указанный в ключевом слове 'as'.
  • c.name и другие подобные выражения: выберите поле 'name' из таблицы 'c', которая снова является таблицей #__ k2_categories.
  • c.alias ascategoryalias и другие подобные выражения: переименование (псевдоним) поля 'alias' в c.alias в 'categoryalias'.

В основном, как уже говорили другие:

  • все, что находится перед точкой, - это имя таблицы, а что-либо после имени таблицы - это имя поля.
  • Оператор as используется для изменения имени.Это полезно иметь полезное имя в качестве результата запроса SQL.Например, вы можете выбрать два средних значения из двух таблиц, одна из которых - средняя по аспирантам, а другая - средняя по аспирантам, поэтому вы можете изменить название полей, чтобы было легче понять, какая средняя по какой таблице.
  • Иногда, чтобы упростить синтаксис, особенно когда вы выбираете поля из многих таблиц, вы переименовываете таблицу, как вы делали это для 'a' и 'c'.
0 голосов
/ 03 января 2011

Вы совмещаете ваши таблицы / представления. «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, ...
0 голосов
/ 03 января 2011

Слово перед точкой - это имя таблицы, слово после нее - это имя столбца.В этом примере a преобразуется в #__k2_items, c в #__k2_categories.Это используется для более короткого и более читаемого SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...