У меня есть следующая таблица:
+------+---------+--------+
| 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 для выбора правильного значения, но поскольку моя настоящая таблица имеет несколько столбцов, это выглядело бы неправильно.
Спасибо.
@MadhurBhaiya он уже пробовал это, сказано в описании, а также порядок в каком поле? если вы попытаетесь упорядочить его по полю lang, en также появится первым, если вы не отсортируете его как DESC.
Все ли языковые коды будут иметь приоритетный порядок? или вы просто хотите, чтобы pt имел первый приоритет; остальные равны и может прийти самый низкий идентификатор строки?






В вашем случае, скажем, если вы знаете, что в вашем приложении есть только два типа языков: «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. Итак, вы можете просто упорядочить по приоритету, чтобы получить тот язык, который должен быть первым.
Вот образец
SELECT b.lang, b.title, b.url
FROM book b
INNER JOIN priority p ON p.lang = b.lang
ORDER BY p.order
Второе решение кажется работоспособным. Я бы убрал первое решение.
Попробуйте
order by field()