[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: По 3 строки к каждой строке другой таблицы
savelikan
Привет всем! опять обращаюсь к Вам за помощью)
Есть две таблицы, простой пример
Таблица 1 "список вопросов":
kq_id | kq_text | kq_subject

таблица 2 "коментарии":
kd_id | kd_base | kd_text

Есть задача. Выбрать все записи из таблицы 1, и максимум по три комментария из таблицы 2 к каждой записи в таблице 1.

Подскажите, пожалуйста, как можно реализовать.

Я вот пробовал вот так:
SELECT *
FROM `krok_questions`
RIGHT JOIN `krok_discuss` ON (`krok_discuss`.`kd_base` = `krok_questions`.`kq_id`)
WHERE `kq_subject` = ".$ks_id."
ORDER BY `kq_id`

но вот как то нужно добавить лимит, чтоб RIGHT JOIN Не присоеденял больше 3х записей к одной из первой таблицы

_____________
Одесса - мой город!)))
depp
тут надо вложенный запрос делать с лимтом.
kaww
Если не накосяил нигде в запросе, то как-то так:
set @dcount := 0, @qid := 0;
select
q.*, d.*,
@dcount := if(@qid = id, @dcount + 1, 1) as rank,
@qid := q.kq_id as qid
from krok_questions as q
left join krok_discuss as d on d.kd_base=q.kq_id
order by q.kq_id, rate desc
having
rank <= 3
Undertaker
Совсем ничего не понял из структуры таблиц, просто оставлю здесь такой запрос
SELECT * FROM `krok_discuss` WHERE (`id`) IN (SELECT `id` FROM `krok_questions`) limit 3


_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
savelikan
Цитата (kaww @ 7.07.2016 - 02:02)
Если не накосяил нигде в запросе, то как-то так:
set @dcount := 0, @qid := 0;
select
q.*, d.*,
@dcount := if(@qid = id, @dcount + 1, 1) as rank,
@qid := q.kq_id as qid
from krok_questions as q
left join krok_discuss as d on d.kd_base=q.kq_id
order by q.kq_id, rate desc
having
rank <= 3

Спасибо! Понял в каком направлении работать.
В Вашем запросе поле id не найдено.
Я сделал вот такой запрос:
set @dcount := 0, @qid := 0;
select
q.kq_id, d.kd_id,d.kd_base,d.kd_msg,
@dcount := if(@qid = kq_id, @dcount + 1, 1) as rank,
@qid := q.kq_id as qid
from krok_questions as q
left join krok_discuss as d on d.kd_base=q.kq_id
WHERE `kq_subject` = 441
having rank <= 3
order by q.kq_id

И получил вот такой результат, как на картинке.
rank не увиличивается

Undertaker, в таком запросе только 3 результата, а мне нужно как вконтакте: запись из krok_questions и к ней три комментарии из krok_discuss

_____________
Одесса - мой город!)))
Быстрый ответ:

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