Maria DB GROUP ПО ID DESC с ВО Волшебством - PullRequest
0 голосов
/ 18 сентября 2018

Попытка получить "ORDER BY id DESC" в "GROUP BY", чтобы получить только последний комментарий.Когда я использую «IN» с> 1 элементами, он работает нормально, но с одним элементом или без «IN».Моя версия MariaDB 10.0.36-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04.

Вот примеры: 56xxx - истинные идентификаторы, 55xxx ложные идентификаторы

   MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid`='6576') GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 55811 |
+-------+
1 row in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
     WHERE (`commentsapi_comment`.`orderid` IN ('6576')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 55811 |
+-------+
1 row in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6576','6576')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 56218 |
+-------+
1 row in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6576','-1')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 56218 |
+-------+
1 row in set (0.01 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6576')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 55811 |
+-------+
1 row in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6576','6577')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 56199 |
| 56218 |
+-------+
2 rows in set (0.00 sec)

MariaDB [shop]> SELECT `commentsapi_comment`.`id` FROM `commentsapi_comment`
      WHERE (`commentsapi_comment`.`orderid` IN ('6577')) GROUP BY orderid DESC;
+-------+
| id    |
+-------+
| 55813 |
+-------+
1 row in set (0.01 sec)

Кто знает причину этого

1 Ответ

0 голосов
/ 06 октября 2018

Это неправильное использование GROUP BY.Более новые версии будут плевать на вас.

Когда в SELECT (например, id) есть неагрегированные столбцы, которых нет в GROUP BY (который имеет только orderid),выбранные предметы выбираются несколько случайным образом.

Предлагаем изменить id на

orderid, MIN(id), MAX(id), COUNT(*), GROUP_CONCAT(id)

IN - это красная сельдь, а не причина.

Если вам нужновсе столбцы, а не только id, вы должны сказать это в вопросе.Есть много вопросов и ответов о "grouwise-max".

...