Есть таблица вида: id, product, user id - уникальное значение product и user - нет, но для одного и того же product значения user не могут быть одинаковыми. собственно, вопрос: как вывести 10 наиболее часто встречающихся записей product и посчитать сколько раз встречается каждая запись?
группирующие запросы. Что-то вроде Код (Text): select count(user_id), product_id from table_name group by product_id;
Все получилось, спасибо! Но возник такой вопрос: выборку делаю из двух таблиц. В первой хранится информация о товарах и пользователях, их купивших, во второй картинки товаров. У каждого товара может быть одна, несколько или ни одной картинки. запрос сделал такой: PHP: select count(a.user_id) as uid, a.product_id, b.img_url from table_prod as a left join table_img as b on b.product_id = a.product_id group by a.product_id order by uid limit 0, 10; и теперь, если у товара больше одной картинки, то итоговое количество становится равным количеству пользователей умноженным на количество картинок, т.е. если товар купило 2 человека и у него 3 картинки, то запрос выдаст результат 6. как поправить?
еще такой момент: в таблице table_img есть поле is_main, которое содержит значения 1 - если это главное изображение товара и 0, если не главное. но если добавить условие Код (Text): where b.is_main = 1 то, соответственно, товары без изображений не учитываются.
сделал так: PHP: select count(a.user_id) as uid, a.product_id, b.img_url from (select a.user_id, a.product_id from table_prod as a group by a.product_id) as a left join table_img as b on b.product_id = a.product_id group by a.product_id order by uid limit 0, 10; результат тот же. подскажите, как сделать - реально уже запутался.
https://dev.mysql.com/doc/refman/5.7/en/derived-tables.html разве то, что у вас сейчас в подзапросе определяет 10 наиболее часто встречающихся записей product и считает сколько раз встречается каждая запись? у вас есть исходный запрос, который выводит некий результат, по сути таблица. и теперь к этой таблице нужно сделать join картинок
все, разобрался. в итоге получилось так: PHP: select uid, a.product_id, b.img_url from (select count(a.user_id) as uid, a.product_id from table_prod as a group by a.product_id) as a left join table_img as b on b.product_id = a.product_id group by a.product_id order by uid limit 0, 10;
судя по всему не разобрались. зачем вам дважды группировка? и order + limit снаружи? у вас есть запрос определяющий 10 наиболее часто встречающихся записей product и сколько раз встречается каждая запись. назовем его исходный. поместите этот результат во вспомогательную таблицу test затем присоедините картинки ... from test as a left join table_img as b ... теперь в последнем запросе замените test на (исходный запрос) и получится нужный вам запрос
если убрать группировку снаружи и сортировку перенести во внутреннюю таблицу, то он выводит результат для каждой картинки и не сортирует по uid. делал так: Код (Text): select uid, a.product_id, b.img_url from (select count(a.user_id) as uid, a.product_id from table_prod as a group by a.product_id order by uid limit 0, 10) as a left join table_img as b on b.product_id = a.product_id