Mysql выбор кол-ва строк с distinct-ом

mstdmstd

Новичок
В mysql запрос :

Код:
SELECT count(*) AS rowsCount
  FROM `wp_aaso_songs` JOIN `wp_aaso_songs_jenres` ON `wp_aaso_songs_jenres`.`song_id` = `wp_aaso_songs`.`ID`
WHERE  jenre_id IN (1,2,3,4) 
  ORDER BY ordering  asc
возвращает больше строк, чем всего есть в таблице wp_aaso_songs за счет того, что в wp_aaso_songs_jenres может быть несколько строк связанных с wp_aaso_songs.

Аналогичный запрос, но с выбором всех данных, а не кол-ва:
Код:
SELECT distinct wp_aaso_songs.*
  FROM `wp_aaso_songs` JOIN `wp_aaso_songs_jenres` ON `wp_aaso_songs_jenres`.`song_id` = `wp_aaso_songs`.`ID`
WHERE  jenre_id IN (1,2,3,4,5) 
  ORDER BY ordering  asc
Будет работать правильно, если в запросе выше написан distinct. Но distinct на возврат кол-ва не работает? Как правильно написать 1й запрос?

Спасибо!
 

mstdmstd

Новичок
Я добавил нруппировку перед сортировкой так :
Код:
SELECT count(*) AS rowsCount
  FROM `wp_aaso_songs` JOIN `wp_aaso_songs_jenres` ON `wp_aaso_songs_jenres`.`song_id` = `wp_aaso_songs`.`ID`
WHERE  jenre_id IN (1,2,3,4)
  GROUP BY `wp_aaso_songs`.`ID`
  ORDER BY ordering  asc
И в результате получилось несколько десятков кол-во записей сгрупированных по коду wp_aaso_songs.
И получить ко-во wp_aaso_songs, мне тогда надо взять кол-во записей . А можно ли сделать лучше чтобы спазу поучить общее кол-во ?
 

mstdmstd

Новичок
убрать GROUP BY ну и ORDER BY тоже
хм... Вы начальный вопрос читали ? А как можно сделать без группировки ?
Сортировка да - там не нужна - она осталась от отладки когда "count(*) AS rowsCount" менялась на звездочку посмотреть какте результаты возвращает запрос...
 

mstdmstd

Новичок
count(укажи что считаешь)
Видмо так ?
Код:
SELECT count(distinct wp_aaso_songs.ID) AS rowsCount
  FROM `wp_aaso_songs` JOIN `wp_aaso_songs_jenres` ON `wp_aaso_songs_jenres`.`song_id` = `wp_aaso_songs`.`ID`
WHERE  jenre_id IN (1,2,3,4)
причем с дистинктом внути каунта. Результат вроде правилен - но не знал что такая конструкция возможна...
 

WMix

герр M:)ller
Партнер клуба
а зачем ты джойнишь?
если jenre_id поле wp_aaso_songs_jenres то считай сразу `wp_aaso_songs_jenres`.`song_id`
 

mstdmstd

Новичок
Джойню потому что wp_aaso_songs_jenres подключается только если есть параметры фильтра на jenre_id
Запрос собирается в одной функции в зависимости от заданных параметров.
 

WMix

герр M:)ller
Партнер клуба
небось пагинацию делаешь?, а чем запрос создаешь в смысле QB?
можно еще и так
PHP:
/* запрос для подсчета */
select count(*) from (
/* запрос для вывода результата */
SELECT *
FROM `wp_aaso_songs` JOIN `wp_aaso_songs_jenres` ON `wp_aaso_songs_jenres`.`song_id` = `wp_aaso_songs`.`ID`
WHERE jenre_id IN (1,2,3,4)
)
 

mstdmstd

Новичок
это общая функция выборки данных по параметрам фильтра - пишу руками в вордпрессе
 
Сверху