|
|
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
Есть таблица с поставщиками, например Код: sql 1. 2. 3. 4. 5. 6. Есть таблица с товарами, например Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Необходимо сделать выборку N произвольных товаров, но не более одного для каждой компании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2013, 05:42:31 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
despicable me, в 2 этапа: 1)выбрать N произвольных компаний 2)выбрать для каждой из них по 1 товару ... N)PROFIT!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2013, 05:57:31 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
Для выборки одного случайного наименования продукции сделал следующим образом Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Набор компаний для WHERE ... IN ... формируется отдельным запросом. Но если необходимо сделать выборку N случайных наименований, этот способ уже не годится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 01:27:08 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
В общем, после продолжительных мытарств пришёл к следующему: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Где /*N*/ - количество уникальных товаров на одну компанию, /*M*/ - общее количество товаров в выборке. Может кому будет полезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 04:16:37 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
Да, чуть не забыл, запросу должна предшествовать инициализация переменных: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 04:23:16 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
despicable me, Не понял. 1. Почему во внутреннем джойне используется левый джойн? Есть продукция, не привязанная ни к какой компании? 2. Каков смысл order by rand() в нем же, если ограничение выборки стоит во внешнем запросе? Насколько понимаю, если у компании более одной товарной строки - это никак не мешает попасть в выдачу, хотя у Вас условие "не более одной продукции для одной компании". 3. Нумерация в таком виде - работать НЕ будет. После order by rand() - повтор номера компании через пару строчек - практически гарантирован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 07:10:07 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
Недавно была тема Нужно что-то лучшее По мотивам: repro Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. результатыCID CNAME CBLOCKED PCOMPANY PIDS QTY RANDOM_ID PID PNAME PPRICE1 comp1 0 1 1;2;3;4;5;6;7;8 8 4 4 prod14 2 comp2 0 2 9;10;11;12;13;14 6 11 11 prod23 3 comp3 0 3 15 1 15 15 prod31 4 comp4 0 (null) (null) (null) (null) (null) (null) (null)5 comp5 0 5 16;17 2 17 17 prod52 CID CNAME CBLOCKED PCOMPANY PIDS QTY RANDOM_ID PID PNAME PPRICE1 comp1 0 1 1;2;3;4;5;6;7;8 8 2 2 prod12 2 comp2 0 2 9;10;11;12;13;14 6 12 12 prod24 3 comp3 0 3 15 1 15 15 prod31 4 comp4 0 (null) (null) (null) (null) (null) (null) (null)5 comp5 0 5 16;17 2 16 16 prod51 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 10:48:39 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
забыл про тестовую зону :) http://sqlfiddle.com/#!2/fafaba/28 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 10:49:59 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
despicable meДля выборки одного случайного наименования продукции сделал следующим образом Но если необходимо сделать выборку N случайных наименований, этот способ уже не годится. Так ты уж определись, СЛУЧАЙНЫХ или ПРОИЗВОЛЬНЫХ. Разные вещи немного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 17:25:18 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
Arhat1091. Почему во внутреннем джойне используется левый джойн? Есть продукция, не привязанная ни к какой компании? Теоретически - а вдруг. У меня такая привычка сложилась. Arhat1092. Каков смысл order by rand() в нем же, если ограничение выборки стоит во внешнем запросе? Насколько понимаю, если у компании более одной товарной строки - это никак не мешает попасть в выдачу, хотя у Вас условие "не более одной продукции для одной компании". Условие уже расширилось до N. Пробовал без внутреннего ORDER BY RAND(), но мне показалось, что это даёт дополнительную "рандомность". Arhat1093. Нумерация в таком виде - работать НЕ будет. После order by rand() - повтор номера компании через пару строчек - практически гарантирован. Честно, не сильно вдавался в детали. Результат меня устроил, на том пока и успокоился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 22:29:55 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
MasterZivТак ты уж определись, СЛУЧАЙНЫХ или ПРОИЗВОЛЬНЫХ. Разные вещи немного. Так а в чём разница то в контексте описанной задачи? Случайные/произвольные из числа имеющихся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 22:31:50 |
|
||
|
выборка N произвольных товаров, но не более одного для каждого поставщика
|
|||
|---|---|---|---|
|
#18+
despicable meMasterZivТак ты уж определись, СЛУЧАЙНЫХ или ПРОИЗВОЛЬНЫХ. Разные вещи немного. Так а в чём разница то в контексте описанной задачи? Случайные/произвольные из числа имеющихся.Существенная разница. Произвольные - например, первая запись из возвращаемых сервером. Не всегда, но достаточно постоянно будет выдаваться одна и та же запись (в условиях одного запроса зависит от способа хранения и параллельных запросов на обновление данных, а так же от параллелизма выборки) Случайные - из всего подмножества строк случайным образом выбрать одну конкретную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 09:34:40 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38422165&tid=1835910]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 188ms |
| total: | 291ms |

| 0 / 0 |
