2017-01-07 4 views
-2

Как я исправил предыдущий вопрос, благодаря ответу, я теперь приклеиваю часть, чтобы получить поток, основанный на последнем thread_date.Результирующие данные по последнему thread_date

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

В потоке есть thread.cat_id, который связан с thesubsubcategory.extra_cat_id.

SELECT 
parent.subcat_id, 
parent.subcat_name, 
child.subsubcat_name, 
child.subcat_id, 
child.cat_id, 
kid.thread_name, 
kid.cat_id, 
kid.thread_date 
FROM 
subcategories parent 
JOIN subsubcategories child 
ON child.cat_id = parent.cat_id 
JOIN threads kid ON child.extra_cat_id = kid.cat_id 
WHERE thread_date = (SELECT MAX(thread_date) FROM threads) 

Что я ожидал это:

Category 
    Subcategory  Latest thread 
    Subcategory  Latest thread 

Что я получаю это:

Category 
    Subcategory  Latest thread 

SQL скрипку: http://sqlfiddle.com/#!9/52e27/2

Любые решения Это?

Спасибо!

+0

Вы фильтруете выход с помощью предложения where, приспосабливаете его к вашим потребностям. –

+0

mysql ?? или sql-сервер? – sumit

+0

Драйвер, который я использую, - Postgresql. – user6632515

ответ

-1

Я получил это исправлено созданием функции PHP, чтобы вернуть последнюю нить с

SELECT * FROM threads WHERE subcat_id = variable SQL.

+0

Errrrrrrrrr что? Это способ, которым пользуются большинство систем форума, поэтому почему downvote? – user6632515

0

Если моя догадка правильная, вы хотите изменить предложение where, чтобы показать больше, основываясь на последней дате, так как ваш threaddate - это дата-время, вам нужно преобразовать его в формат даты, прежде чем сравнивать его.

SELECT parent.subcat_id, 
     parent.subcat_name, 
     child.subsubcat_name, 
     child.subcat_id, 
     child.cat_id, 
     kid.thread_name, 
     kid.cat_id, 
     kid.thread_date 
    FROM subcategories parent 
    INNER JOIN subsubcategories child 
     ON child.cat_id = parent.cat_id 
    INNER JOIN threads kid 
     ON child.extra_cat_id = kid.cat_id 
WHERE convert(date,thread_date,108) = (
     SELECT MAX(convert(date,thread_date,108)) 
     FROM threads 
     ) 
+0

Нет, это не то, что я действительно хочу. Я хочу показать последний поток, основанный на thread_date (который не является дата atm) для каждой подкатегории (которая является subsubcategory в SQL). – user6632515

0

Нужен ли вам поток с максимальной датой для каждой подзадачи, не так ли?

SELECT 
    parent.subcat_id, 
    parent.subcat_name, 
    child.subsubcat_name, 
    child.subcat_id, 
    child.cat_id, 
    kid.thread_name, 
    kid.cat_id, 
    kid.thread_date 
FROM subcategories parent 
    JOIN subsubcategories child ON child.cat_id=parent.cat_id 
    JOIN threads kid ON kid.cat_id=child.extra_cat_id 
WHERE kid.thread_date= 
    (SELECT MAX(kid2.thread_date) 
    FROM threads kid2 
    WHERE kid2.cat_id=child.extra_cat_id) 
+0

Это дублирует названия категорий. – user6632515

+0

@ user6632515, что вы имеете в виду? Существуют ли подкатегории, которые имеют более чем одну соответствующую подзадачу? В этом случае subcat_id и subcat_name таких подкатегорий будут повторяться в соответствующем количестве строк, и это было бы чрезмерно то, что вам нужно. –

+0

Да. В одной и той же подкатегории есть несколько подкатегорий. Любая идея сделать это? – user6632515

Смежные вопросы