MySQL группа по выбранной строке - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующая таблица:

+------+---------+--------+
| lang | title   | url    |
+------+---------+--------+
| pt   | Livro 1 | o294jl |
| en   | Book 1  | o294jl |
| en   | Book 2  | 7s621f |
+------+---------+--------+

Мне нужно расставить приоритеты lang, когда системным языком является определенный язык.Например, скажем, я работаю с языком pt, мне нужен запрос, который возвращает следующее:

+------+---------+--------+
| lang | title   | url    |
+------+---------+--------+
| pt   | Livro 1 | o294jl |
| en   | Book 2  | 7s621f |
+------+---------+--------+

В основном мне нужно установить детерминированное значение для title, lang,и т.д., когда GROUP BY url используется.В настоящее время он в основном получает самое низкое значение id:

SELECT lang, title, url
FROM book
GROUP BY book.url

Я пытался использовать ORDER BY с предложениями CASE, но, поскольку он запускается после операции GROUP BY, он не работает,Я мог бы использовать GROUP_CONCAT с IF, чтобы выбрать правильное значение, но, поскольку в моей реальной таблице есть несколько столбцов, это не выглядело бы хорошо.

Спасибо.

1 Ответ

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

Для вашего случая, скажем, если вы знаете, что есть только два типа языков, которые «pt» и «en» в вашем приложении.Вы можете просто потратить свой запрос на order by lang desc.

Вот пример

SELECT b.lang, b.title, b.url
FROM book b
GROUP BY b.lang,b.title,b.url
ORDER BY b.lang DESC

Но, в случае, если у вас может быть больше типов lang в будущем, и может потребоваться заказ по определенному lang.Я бы посоветовал вам добавить еще одну таблицу для хранения значения приоритета lang. Итак, вы можете просто упорядочить по приоритету, чтобы получить любой lang, который должен быть на первом месте.

Вот пример

SELECT b.lang, b.title, b.url
FROM book b 
INNER JOIN priority p ON p.lang = b.lang
ORDER BY p.order
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...