Как получить только 1 результат из таблицы, которая содержит это значение более одного раза?

0

У меня есть таблица, которая выглядит так:

ID     Name    Location
1      peter   New York
2      john    New York
3      jack    New York
4      shaun   London

Как вы видите, значения столбцов местоположения могут быть одинаковыми для многих пользователей. Как я могу получить только один результат от каждого местоположения при поиске в Нью-Йорке?

Я использую эти SQL-запросы:

$stmt = $pdo->prepare('SELECT * from users WHERE location SOUNDS LIKE  :s');
$stmt->bindValue(':s', '%' . $query . '%' , PDO::PARAM_INT);
$stmt->execute();
$values = $stmt->fetchAll();

$count = $stmt->rowCount();
if($count > 0){
    foreach($values as $val){
        echo $val['location'];
    }
}

Обратите внимание: я не хочу использовать LIMIT 1 потому что это для формы поиска, и были бы другие местоположения, которые пользователь может захотеть просмотреть, как Newcastle при вводе нового.

Возможно ли это, или мне нужно создать другую таблицу с отношением друг к другу с таблицей пользователей?

  • 0
    Какой вы хотите?
  • 0
    @GordonLinoff, это для формы поиска, так что это может быть любое место, и это местоположение может существовать более одного раза, я просто хочу показать один из каждого дублированного местоположения
Показать ещё 1 комментарий
Теги:
database
pdo

1 ответ

1

Вы можете сделать что-то вроде этого:

SELECT * 
FROM users
WHERE ID IN (SELECT MIN(id)
             FROM users
             WHERE location SOUNDS LIKE  :s
             GROUP BY location
            );
  • 0
    а все остальные функции останутся прежними? $stmt->bindValue(':s', '%' . $query . '%' , PDO::PARAM_INT); $stmt->execute(); $values = $stmt->fetchAll();
  • 0
    @Питер . , , Это вернет одну строку для каждого местоположения, ту, которая имеет самый низкий id .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню