Если у меня есть таблица с гипотетическими столбцами foo
и bar
. бар может иметь в себе 50-60 различных значений. Моя цель здесь - выбрать, скажем, до 5 строк за 6 уникальных баров. Так что, если у 6 уникальных баров, которые выбраны из 50-60 каждый, есть как минимум 5 строк данных, у нас будет всего 30 строк.Запрос на вопрос MySQL
ответ
Получается ли это вызов из какой-либо программы?
Если это возможно, вы можете просто найти строки и случайно отправить их в оператор select.
Таким образом, ваш выбор может быть просто: выберите * из таблицы, где находится строка в (?,?), И вы можете перенести проблему случайности в код, который, откровенно говоря, лучше справляется с этим.
Я думаю, что самый простой способ - использовать СОЮЗ.
SELECT * FROM table WHERE bar = 'a' LIMIT 5 UNION SELECT * FROM table WHERE bar='b' UNION SEL ....... you get the jist, i hope
EDIT: не уверен, если это то, что вам нужно - вы не говорите, нужен ли этот запрос также каким-то образом определить бары? или если они пройдены?
Ее было время, так как я работал с MySQL (я работаю с MSSQL в последнее время), но две вещи приходят на ум:
- Своего рода автообъединение
- Cursor
автообъединение может выглядеть как
SELECT DISTINCT bar FROM table AS t1 LIMIT 5
JOIN table AS t2 ON t1.foo = t2.foo
Опять же, его б een a while, так что это может быть недействительным MySQL. Кроме того, вы получите все Foo's back для 5 баров, так что вам придется выяснить, как обрезать это.
Что вы действительно хотите сделать это:
SELECT *
FROM `sometable`
WHERE `bar` IN (
SELECT DISTINCT `bar`
FROM `sometable`
ORDER BY RAND()
LIMIT 6
)
К сожалению, вы, вероятно, получите это:
ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
Возможно, ваша версия будет более тесного сотрудничества. В противном случае вам, вероятно, понадобится сделать это как два запроса.
Я собирался рекомендовать то же самое решение, просто не настолько уверенное в жизнеспособности подзапросов. – David
Этот запрос может возвращать более 5 строк на уникальный бар, так что это не то, что он ищет. –
простое решение, которое занимает 7 запросов:
SELECT distinct bar FROM sometable ORDER BY rand() LIMIT 6
Затем для каждого из значений 6 бар выше, сделать это, заменив {$ бар} для значения, конечно:
SELECT foo,bar FROM sometable WHERE bar='{$bar}' ORDER BY rand() LIMIT 5
Будьте осторожны с использованием «ORDER BY rand()», поскольку это может привести к тому, что MySQL выберет много строк из вашей таблицы и вычислит функцию rand() для всех из них, а затем отсортирует их. Это может занять много времени, если у вас большой стол.
Если это займет много времени, то для первого запроса вы можете удалить предложения ORDER BY и LIMIT и выбрать 6 случайных значений в программном коде после выполнения запроса.
Для второго запроса, вы можете разделить его на два этапа:
SELECT count(*) FROM sometable WHERE bar='{$bar}'
Затем в вашем программном коде, вы знаете, сколько элементов там, так что вы можете произвольно выбирать, какие из них, чтобы посмотреть на , и использовать OFFSET и LIMIT:
SELECT foo,bar FROM sometable WHERE bar='{$bar}' LIMIT 1 OFFSET {$offset}
- 1. Запрос на MySQL вопрос
- 2. Mysql вопрос запрос
- 3. MySQL Slow вопрос запрос
- 4. простой MySQL вопрос запрос
- 5. Mysql запрос вопрос вычесть
- 6. Mysql минус запрос вопрос
- 7. Простой MySQL вопрос запрос
- 8. Запрос MySQL Вопрос?
- 9. Mysql запрос вопрос формата
- 10. MySQL вопрос запрос
- 11. Запрос MySQL любой вопрос?
- 12. MySQL вопрос запрос
- 13. MySQL вопрос выберите запрос
- 14. MySQL вопрос запрос COUNT
- 15. MySQL вопрос десятичного запрос
- 16. Очень простой запрос на mySQL (вопрос начинающего)
- 17. Задать вопрос Запрос в MySQL
- 18. MYSQL вопрос запрос с UPDATE
- 19. Вопрос с запросом на вопрос MySQL
- 20. Mysql вопрос запрос, который возвращает неправильный SUM
- 21. Mysql лимитный ордер на вопрос
- 22. Один стол, три колонки вопрос MYSQL запрос
- 23. php mysql запрос синтаксиса вопрос относительно ""
- 24. Запрос на быстрый запрос MySQL
- 25. MySQL вопрос запрос - создание отчета переназначения
- 26. Простой вопрос MySQL: запрос с нулевым значением
- 27. MySQL для заказа запрос - еще один вопрос
- 28. Запрос на запрос MySQL
- 29. Запрос на запрос MySQL
- 30. MySQL вопрос запрос на левой стороне присоединиться к
Какие бруски вы хотите? Любые 6 неуклюжих баров? –
Любые 6 уникальных баров. До N строк максимум для каждого бара. Если в одном баре есть только 3 связанных строки, тогда он должен просто захватить все 3. – Coocoo4Cocoa