Форум → Разработка → Базы данных → Обьясните запрос
Обьясните запрос
-
SELECT *
FROM (`video_albums`)
JOIN `video` ON `video_albums`.`id` = `video`.`id_album`
WHERE `video_albums`.`status` = '1'
AND `video`.`status` = '1'
AND `video`.`main` = '1'
GROUP BY `video_albums`.`id`, `video`.`id` %2
Он собака работает как мне нужно но его понять я не могу,вот эта часть волнует(GROUP BY `video_albums`.`id`, `video`.`id` %2 ). -
Фев. 26, 2013, 9:48 д.п., спустя 7 часов 55 минут 3 секунды
Когда просишь поучаствовать, то оформляй так, чтобы твой пост читался макс. удобно - код загони в
Во вторых тут налицо логическая ошибка: запросы с GROUP BY нельзя оформлять с SELECT *. То что это не просигналено как ошибка – это тупняк майсиквельный, при некоторых настройках он ВНЕЗАПНО будет признан ошибкой.
Вот реально по сути группировки не про все поля можно сказать что именно они должны содержать, так что считай там выводится случайная запись. Пиши явно список полей – короткий список )))
Третье:вот эта часть волнует(GROUP BY `video_albums`.`id`, `video`.`id` %2 ).
Ну правильно ты не можешь понять. Я тоже не могу ))) "группировать по видеоальбомам и чётности видео" это хуйня какая-то. В сочетании с тем, что ты пытаешся вывести просто все поля двух таблиц после группировки, это просто непонятное мессиво.
Что должно получаться в итоге?Спустя 154 сек.P.S. Попробуй заменить весь GROUP BY наORDER BY `video_albums`.`id`
мне кажется ничего не изменится, но это будет "правильный" запросιιlllιlllι унц-унц -
Фев. 26, 2013, 3:01 п.п., спустя 5 часов 13 минут 18 секунд
Данный запрос (это пример) данный запрос выбирает по два видео к каждому альбому, на счет SELECTA я просто накидалСпустя 124 сек.P.S. Попробуй заменить весь GROUP BY наORDER BY `video_albums`.`id`
мне кажется ничего не изменится, но это будет "правильный" запрос
ты прав тебе кажеться -
Фев. 26, 2013, 3:13 п.п., спустя 12 минут 16 секунд
ukroficer, так в чем вопрос собственно, ты не понимаешь что такое GROUP BY? -
Фев. 26, 2013, 3:20 п.п., спустя 7 минут 14 секунд
Что такое GROUP BY я понимаю не понимаю почемуGROUP BY `video_albums`.`id`, `video`.`id` %2
Спустя 43 сек.и дает то что мне нужно я получаю две записи каждой категории в данном случае 2 видео каждого альбома -
Фев. 26, 2013, 5:26 п.п., спустя 2 часа 5 минут 47 секунд
Значит не понимаешь. GROUP BY как бы склеивает множество строк результата запроса в одну строку (группировка) про критерию уникальности комбинации полей после GROUP BY.
Во у тебя и получается на каждый `video_albums`.`id приходится два возможных значения `video`.`id` % 2 (остаток от деления на два - ноль и единица)
итого две строки.
Другой вопрос, что решать эту задачу таким образом некорректно, что тебе и объяснил artoodetoo. -
Фев. 26, 2013, 7:54 п.п., спустя 2 часа 27 минут 17 секунд
AlexB, помоему ему похуй. нам должно быть тем более похуй.ιιlllιlllι унц-унц -
Фев. 26, 2013, 8:16 п.п., спустя 22 минуты 45 секунд
кстати, хоть эта тема говняцкая, но я я узнал новый грязный хак. спасибо автору )))
нифига себе! что тут еще скажешь.
да, order by здесь будет работать по другому, это я ошибся, признаю. тем не менее за составом полей в SELECT надо следить, это по прежнему в силе.ιιlllιlllι унц-унц -
Фев. 26, 2013, 8:20 п.п., спустя 4 минуты 4 секунды
ага, я тоже такого изврата раньше не видел и тоже не сходу въехал, пока вы обсуждать не начали …
кстати, хоть эта тема говняцкая, но я я узнал новый грязный хак.
но хак достаточно грубый и ненадежный ибо предполагает, что всегда есть четные и нечетные id, что вообще не обязательно ни разу -
Фев. 26, 2013, 10:23 п.п., спустя 2 часа 2 минуты 39 секунд
Да нет четный и не четные тут не при чем… ну я так и думал про остаток но все таки почему этого нет в доке… а как бы вы решили эту задачу?Спустя 178 сек.если там одно видео в альбоме то оно берет одно при чем тут.. четные не четные. -
Фев. 27, 2013, 1:03 д.п., спустя 2 часа 39 минут 43 секунды
А я так и не понял в чем задача, извлечь первые попавшиеся два видео для каждого альбома без всякого критерия?
а как бы вы решили эту задачу?
А если два с id=1 и id=3 ?
если там одно видео в альбоме то оно берет одно при чем тут.. четные не четные. -
Фев. 27, 2013, 2:23 д.п., спустя 1 час 20 минут 20 секунд
Зада простоя вывести одним запросом два видео с каждого альбома. -
Фев. 27, 2013, 6:55 д.п., спустя 4 часа 32 минуты 17 секунд
вывести одним запросом два видео с каждого альбома.
я не знаю простого решения. limit здесь не получается применить, а функций типа оракловой row_number() в мускуле нет. недавно очень близкую задачу помогал разрулить. две таблицы, на каждую запись из одной надо выдать 3 первые записи (в календарном порядке) из другой. см. здесь. условие похожее но там немного посложнее - с сортировкой
в общем если брать "любые две записи", то твой вариант интересный хотя непонятныйιιlllιlllι унц-унц -
Фев. 28, 2013, 12:15 д.п., спустя 17 часов 20 минут
GROUP_CONCAT и explode на стороне PHP, наверно самое простое … во всяком случае всегда корректно будет работать при таком же плане запроса.
В постгресе можно было бы поумнее, там есть агрегирующие массивы и слайсы … -
Фев. 27, 2013, 4:24 п.п., спустя 16 часов 8 минут 18 секунд
Розюзал GROUP_CONCAT() классная вещь. Один минус то что нужно еще потом пройтись php по массиву, а так в целом то что нужно. Спасибо всем.
Пожалуйста, авторизуйтесь, чтобы написать комментарий!