Зависит, если вы просто хотите самый последний комментарий за product_id, или если вы хотите все комментарии, но только отсортированный по product_id, где продукт с последним комментарием является первым.
Если вы хотите все комментарии, сгруппированных по product_id, где product_ids сортируется в порядке последнего комментария (т.е. посмотреть, как последнее время заказа штампа предложить продукты в порядке (3,1,2):
product_id comment_timestamp
3 2012-03-13
3 2012-03-09
3 2012-03-01
1 2012-03-12
1 2012-01-01
2 2012-03-11
Тогда вот как вы можете это сделать - узнать последние метки времени для каждого продукта, JOIN, что на ваш основной запрос, и заказ на него:
SELECT comments.products_products_id, products.name,
products.minilocation, products.users_user_id,
comments.comment, comment_id, comments.time_stamp,
users.username, users.miniavatar
FROM products
-- NEW JOIN:
INNER JOIN (SELECT product_id, MAX(time_stamp) as latest
FROM comments
GROUP BY product_id) latest
ON latest.product_id = products.product_id
-- as before.
INNER JOIN comments ON comments.products_products_id = products.products_id
INNER JOIN users ON users.user_id = comments.products_users_user_id
-- NEW SORT:
ORDER BY latest.latest DESC, comments.time_stamp DESC
Новый стол, соединенный с ним, является максимальным (т. самая последняя) отметка времени на идентификатор продукта. Это будет одинаково в пределах одного идентификатора продукта.
Мы сортируем этим первым (сортировать по последнему комментарию метки времени), а затем сортировать по индивидуальному комментарию метки времени в каждый идентификатор продукта.
Если вы хотите самый последний комментарий за product_id, т.е.
product_id comment_timestamp
3 2012-03-13
1 2012-03-12
2 2012-03-11
Затем используйте:
SELECT comments.products_products_id, products.name,
products.minilocation, products.users_user_id,
comments.comment, comment_id, comments.time_stamp,
users.username, users.miniavatar
FROM comments
-- NEW SELF-JOIN
LEFT JOIN comments c2 ON comments.products_products_id = c2.products_products_id
AND comments.time_stamp < c2.time_stamp
INNER JOIN products ON comments.products_products_id = products.products_id
INNER JOIN users ON users.user_id = comments.products_users_user_id
-- new condition
WHERE c2.time_stamp IS NULL
ORDER BY comments.time_stamp DESC
Этот тип запроса называется "величайшая п на группу", и вы в основном присоединитесь к вашей таблице КОММЕНТАРИЙ к себе в пределах каждый product_id. Вы также присоединяетесь к нему так, чтобы одна таблица имела time_stamps меньше, чем другая. Условие WHERE
выбирает строки таким образом, что для этого product_id больше нет метки времени, т. Е. Последнего комментария.
Есть комментарии.products_products_id на самом деле comments.products_id? –
Для того, чтобы оставить комментарий, пожалуйста, авторизуйтесь. –
ya все идентификаторы верны. yep в основном просто хочу, чтобы продукт с последним комментарием сверху. dont want any duplicates для идентификаторов продуктов – Anonymous