Предполагая, что поле Users.Id уникально, автоматически увеличивается МОЙ ГЛАВНЫЙ ВОПРОС: "Отличается" ли в этом запросе, что-либо делать, совершенно бессмысленно иметь его в этом конкретном запросе?
SELECT DISTINCT users.id, CONCAT(users.firstname, ' ', users.surname) AS name FROM users
WHERE users.id!=$me AND (LOWER(users.firstname) LIKE '$term%' AND (email='$email' OR username='$email'))
-
Если запрос был изменен на:
SELECT DISTINCT users.surname, firstname, surname
FROM users WHERE surname = 'Smith''
Тогда я могу получить в качестве результата только Джейн Смит или Джона Смита, но не их обоих или кого-либо еще с именем Смит, верно?
(Верхний запрос является оригиналом)
DISTINCT users.surname, firstname, surname
тогда вы можете быть уверены, что получите только отдельные значения для этих выбранных полей. Если у вас есть Джейн Смит и Джон Смит, обе эти записи все равно будут перечислены. Если у вас есть 2 или более Джона Смита, хотя, например, вы получите только одну отдельную запись для Джона Смита, но не обе, используяDISTINCT
может использоваться для одного или нескольких полей, гарантируя, что эти записи полей не являются дублирующимися значениями (т.е. различаются), где все значения одинаковы. w3schools.com/sql/sql_distinct.aspОтветы:
Предложение DISTINCT, удаляет дублирующую запись из вывода запроса на выборку. Итак, если какой-либо из столбцов SELECT в вашем запросе является УНИКАЛЬНЫМ, то нет смысла использовать DISTINCT. Это может замедлить производительность, так как сервер базы данных попытается обнаружить дублирующиеся записи, которых там нет. В первом запросе, поскольку вы возвращаете идентификатор пользователя, который является уникальным - поэтому, даже если вы удалите уникальный, результаты не изменятся, и вы также должны увидеть более высокую производительность.
Во втором запросе, если два или более пользователей имеют одно и то же имя, вы получите один результат.
источник