|
|
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
есть таблица CREATE TABLE IF NOT EXISTS `DisPacket` ( `Inc` int(11) NOT NULL, `Hotel` int(11) NOT NULL, `Tour` int(11) NOT NULL, `Meal` int(11) NOT NULL, `CheckIn` datetime NOT NULL, `TownFrom` int(11) DEFAULT NULL, `State` int(11) DEFAULT NULL, `Enable` bit(1) DEFAULT NULL, `ptype` int(11) NOT NULL, PRIMARY KEY (`Inc`), KEY `T_s` (`TownFrom`,`State`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Пишем запрос SELECT * FROM `DisPacket` WHERE `TownFrom` = 2 AND `State` = 4 нужно в этой выборке получить все уникальные значения в поле meal нужно в этой выборке получить все уникальные значения в поле Hotel нужно в этой выборке получить все уникальные значения в поле Tour нужно в этой выборке получить все уникальные значения в поле CheckIn как это лучше сделать? или это писать 4 запроса вида? SELECT meal FROM `DisPacket` WHERE `TownFrom` = 2 AND `State` = 4 group by meal; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 18:19:35 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
mmm3или это писать 4 запроса вида? SELECT meal FROM `DisPacket` WHERE `TownFrom` = 2 AND `State` = 4 group by meal;Ну да, так и писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 18:35:10 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
mmm3, Код: sql 1. 2. 3. 4. 5. 6. Учи SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 22:40:33 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
MasterZiv , syntax error адназначна. mmm3нужно в этой выборке получить все уникальные значения в поле meal нужно в этой выборке получить все уникальные значения в поле Hotel нужно в этой выборке получить все уникальные значения в поле Tour нужно в этой выборке получить все уникальные значения в поле CheckIn Чё, вот прям в ОДНОЙ выборке? сам-то как себе это представляешь? mmm3или это писать 4 запроса Угу. Только не группировать, а тупо DISTINCT - зачем лишние ресурсы жрать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2014, 08:59:40 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
AkinaТолько не группировать, а тупо DISTINCT - зачем лишние ресурсы жрать?А что, есть практически доказуемая разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2014, 10:03:16 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
miksoftесть практически доказуемая разница? GROUP BY выдаёт результаты в сортированном порядке, DISTINCT - в произвольном. И я скорее предположу, что в первом случае имеется дополнительная сортировка, чем что во втором выполняется целенаправленное разупорядочивание. Понимаю, что разница скорее всего ничтожна - но она таки есть. Насчёт поймать практически - не знаю, не пробовал. Это нужны большие средневариабельные массивы (коих тупо нет, генерить же влом) - но на них основное время будет тратиться на вывод, а не на выполнение запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2014, 12:15:58 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
AkinaGROUP BY выдаёт результаты в сортированном порядке, DISTINCT - в произвольном. И я скорее предположу, что в первом случае имеется дополнительная сортировка, чем что во втором выполняется целенаправленное разупорядочивание.А я бы предположил, что вряд ли в MySQL более одного алгоритма для столь схожих действий. Он и в более важных случаях не балует разнообразием. Кстати, для GROUP BY сортировку можно выключить с помощью ORDER BY NULL. Правда, дает ли это какой-либо практический эффект - не знаю, не было повода проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2014, 12:22:15 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
Судя по беглому поиску, копья я на тему GROUP BY/DISTINCT ломаются давно, но почти везде народ сходится к тому, что одинаково. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2014, 12:30:09 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
miksoftА я бы предположил, что вряд ли в MySQL более одного алгоритма для столь схожих действий. Он и в более важных случаях не балует разнообразием. В случае GROUP BY набор отдаётся в сортированном порядке. В случае DISTINCT - в порядке, в котором значения встречаются в первый раз при сортировке по первичному индексу, во всяком случае при фулскане. Если алгоритм один - то и результат должен быть один. Так что разница явно имеет место быть. Опять же явное указание, что ORDER BY NULL отключает сортировку, свидетельствует о том, что в обычном случае она присутствует как отдельный этап обработки. Это для сравнительно небольших выходных массивов, которые могут быть сортированы в памяти без кэширования на диск. Думаю, что для больших массивов разница станет заметна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2014, 13:46:44 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
Akina, Спорить не буду, практических замеров у меня нет. Но ежели у Вас появятся - было бы любопытно взглянуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2014, 13:50:29 |
|
||
|
как правильно написать запрос?
|
|||
|---|---|---|---|
|
#18+
Опять же тупо. В таблице 2 поля - автоинкремент и INT. Вот эксплейны: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Как видно, группировка добавляет filesort. Значит, чтобы ощутить разницу, достаточно обработать такой массив данных, чтобы filesort кэшированных данных занимал ощутимое время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2014, 14:38:32 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=152&tid=1833796]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 329ms |

| 0 / 0 |
