В силу пункта ORDER BY id DESC
, запрос обрабатывается, скорее, как если бы оно было написано:
SELECT DISTINCT name, id
FROM table
ORDER BY id DESC;
за исключением того, что id
столбцы не возвращаются пользователю (вы). Набор результатов должен содержать id
, чтобы иметь возможность заказать его. Очевидно, что этот набор результатов имеет четыре строки, так что это то, что возвращается. (Мораль:. Не заказываем скрытыми колоннами —, если вы не знаете, что он собирается сделать, чтобы ваш запрос)
Try:
SELECT DISTINCT name
FROM table
ORDER BY name;
(с или без DESC по прихоти). Это вернет только две строки.
Если вам нужно знать об id
для каждого имени, рассмотреть следующие вопросы:
SELECT name, MIN(id)
FROM table
GROUP BY name
ORDER BY MIN(id) DESC;
Вы можете использовать MAX одинаково хороший эффект.
Все это относится ко всем базам данных SQL, включая MySQL. У MySQL есть некоторые правила, которые позволяют вам опускать предложения GROUP BY с несколькими недетерминированными результатами. Я рекомендую не использовать эту функцию.
Долгое время (возможно, даже сейчас) стандарт SQL не позволял вам заказывать по столбцам, которые не были в списке выбора, чтобы избежать подобных недоразумений. Когда результирующий набор не включает данные упорядочения, упорядочение набора результатов называется «существенным упорядочением»; если в результирующем наборе отображаются все упорядочивающие столбцы, это «несущественный порядок», потому что у вас достаточно данных для заказа данных самостоятельно.
В чем ваш вопрос? – eggyal
он не выбирает различные, он выводит все имена даже дубликатов – bizkit1
Если ваш вывод - это только имя, то почему вы используете ORDER по id. Кроме того, SQL, который вы используете, выглядит правильно для того, что вы просите. Попробуйте следующее: ** SELECT DISTINCT name FROM table WHERE name LIKE '% $ string%' ORDER BY name DESC ** – Linger