[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка по количеству связанных записей
AlmazDelDiablo
Привет всем.
SQL — моё слабое место, а посему прошу у вас помощи.

Имеется все таблицы. В одной — заголовки и описание рассказов, в другой — главы из этих самых рассказов. Связь происходит за счет указания айди рассказа-хозяина в поле «tale» у главы. Суть проблемы в следующем: нужно выбрать из базы только те рассказы, у которых есть хотя бы одна глава.

Моя попытка это сделать, естественно, увенчалась полным провалом:
SELECT * FROM {{tales}} WHERE (SELECT COUNT(*) FROM {{chapters}} WHERE `tale` = {{tales}}.id) > 0
(вместо значений в {{}} подставляются названия указанных в фигурных скобках таблиц с префиксами).

Результатом этого запроса становится один рассказ (id = 1), хотя в базе два рассказа, которые имеют главы. Подскажите, что в запросе не так?

_____________
Блог | VK | GitHub | Twitch
Winston
Так?
SELECT t.* FROM {{tales}} AS t 
INNER JOIN {{chapters}} AS c
ON t.id = c.tale
GROUP BY t.id
AlmazDelDiablo
Цитата (Winston @ 2.06.2013 - 01:23)
Так?
SELECT t.* FROM {{tales}} AS t 
INNER JOIN {{chapters}} AS c
ON t.id = c.tale

Хм... Твой вариант два раза вывел первый рассказ.
А вообще, мой запрос, оказывается, работает. Это я, дурак, пытался результат получить через queryRow, а не queryAll.

Прошу прощения за глупую тему)

_____________
Блог | VK | GitHub | Twitch
Winston
Цитата (AlmazDelDiablo @ 1.06.2013 - 23:26)
Хм... Твой вариант два раза вывел первый рассказ.

Да, я упустил группировку, исправил.
AlmazDelDiablo
Вернусь к теме, всё еще мучаюсь с запросами.

Ситуация такая:
Имеем в наличии поля order и id записи в таблице. Задача: выбрать из базы id ближайшей предыдущей записи (последовательность записей определяется по полю order), у которой есть записи в связанной таблице. У меня получился вот такой неработающий монстр:
SELECT `id` FROM {{tales}}
WHERE `id` = (
SELECT MAX(`id`) FROM {{tales}}
WHERE `order` < :order AND (
SELECT COUNT(*) FROM {{chapters}}
WHERE `tale_id` = {{tales}}.`tale_id`
) > 0
)


_____________
Блог | VK | GitHub | Twitch
AlmazDelDiablo
Все оказалось проще, чем казалось ^^
SELECT id FROM {{tales}}
WHERE id = (
SELECT MAX(t.id) FROM {{tales}} AS t
INNER JOIN {{chapters}} AS c ON t.id = c.tale_id
WHERE t.order < :order
)


_____________
Блог | VK | GitHub | Twitch
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.