в общем ситуация такая..
представим 2 таблицы например:
category
id | name
file
id | cat_id | name
нужно получить список id | name из первой таблицы + пересчет количества файлов по cat_id из второй таблицы..
итересует теоретическая часть.. как будет оптимальнее? считать это двумя запросами или объединять в один?
и возможно ли вообще объединить это?
SELECT `id`, `name`, (SELECT COUNT(*) FROM `file` WHERE `cat_id`=t.`id`) AS `count` FROM `category` t
06 Янв 2011, 13:28aBSuRD, спасибо примерно такое выражение уже видел.. мне немного непонятно что значит буква t ?
06 Янв 2011, 13:32wappartizan, это для обозначения таблицы внутри запроса. Погугли про объединение запросов..
06 Янв 2011, 13:46aBSuRD, ок.. с этим вроде разобрался..
теперь попробуем усложнить ситуацию..
те же 2 таблицы
category
id | name
file
id | cat_id | name | time
получить нужно примерно тоже самое
id | name | count | counttoday ( where `time` >'$timemidnight')
как будет выглядеть такой запрос?
SELECT `id`, `name`
,(SELECT COUNT(*) FROM `file` WHERE `cat_id`=t.`id`) AS `count`
,(SELECT COUNT(*) FROM `file` WHERE `cat_id`=t.`id` and time>$time) AS `counttoday`
FROM `category` t
wappartizan,
AS - в переводе на русский "как"
SELECT 1+2 AS number // выдаст поле number со значением 3
SELECT t.value FROM table AS t // вытащит поле value из таблицы table, которая обозначена как t
Fashion, спасибо.. принцип понятен.. то есть вкладывать можно через запятую практически неограниченно..
попробуем немного по другому..
оставим одну таблицу
file
id | cat_id | name | time
можно из нее получить массив вида
cat_id | count (для всех уникальных cat_id)
ну как бы то же самое но не дергая первую таблицу