Xwab
Форумыnavigate_nextПрограммирование на PHP

пдскажите sql запрос
Сообщения
wappartizan

в общем ситуация такая..
представим 2 таблицы например:
category
id | name

file
id | cat_id | name

нужно получить список id | name из первой таблицы + пересчет количества файлов по cat_id из второй таблицы..

итересует теоретическая часть.. как будет оптимальнее? считать это двумя запросами или объединять в один?
и возможно ли вообще объединить это?

06 Янв 2011, 13:16
aBSuRD

SELECT `id`, `name`, (SELECT COUNT(*) FROM `file` WHERE `cat_id`=t.`id`) AS `count` FROM `category` t

06 Янв 2011, 13:28
wappartizan

aBSuRD, спасибо примерно такое выражение уже видел.. мне немного непонятно что значит буква t ?

06 Янв 2011, 13:32
aBSuRD

wappartizan, это для обозначения таблицы внутри запроса. Погугли про объединение запросов..

06 Янв 2011, 13:46
wappartizan

aBSuRD, ок.. с этим вроде разобрался..

теперь попробуем усложнить ситуацию..

те же 2 таблицы

category
id | name

file
id | cat_id | name | time


получить нужно примерно тоже самое

id | name | count | counttoday ( where `time` >'$timemidnight')

как будет выглядеть такой запрос?

06 Янв 2011, 13:55
Fashion

t - это псевдоним. и их лучше обозначать через AS

06 Янв 2011, 13:56
wappartizan

Fashion, что значит через AS ? пример можно?

06 Янв 2011, 13:57
Fashion

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

06 Янв 2011, 13:57
Fashion

wappartizan,
AS - в переводе на русский "как"
SELECT 1+2 AS number // выдаст поле number со значением 3
SELECT t.value FROM table AS t // вытащит поле value из таблицы table, которая обозначена как t

06 Янв 2011, 13:59
wappartizan

Fashion, спасибо.. принцип понятен.. то есть вкладывать можно через запятую практически неограниченно..

попробуем немного по другому..
оставим одну таблицу

file
id | cat_id | name | time

можно из нее получить массив вида

cat_id | count (для всех уникальных cat_id)

ну как бы то же самое но не дергая первую таблицу

06 Янв 2011, 14:05
Ответить на тему