【问题标题】:How to get only 1 result from a table that contain this value more than once?如何从多次包含此值的表中仅获取 1 个结果?
【发布时间】:2018-02-25 16:19:39
【问题描述】:

我有一个看起来像这样的表:

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,因为它用于搜索表单,并且用户可能希望在输入 new 时查看其他位置,例如 Newcastle。

是否可以这样或者我需要创建另一个与用户表具有一对多关系的表?

【问题讨论】:

  • 你要哪一个?
  • @GordonLinoff ,这是一个搜索表单,所以它可以是任何位置,并且这个位置可能存在不止一次,我只想从每个重复的位置显示一个
  • @Syscall , 使用有什么问题吗?

标签: php mysql sql database pdo


【解决方案1】:

你可以这样做:

SELECT * 
FROM users
WHERE ID IN (SELECT MIN(id)
             FROM users
             WHERE location SOUNDS LIKE  :s
             GROUP BY location
            );

【讨论】:

  • 所有其他功能都保持不变? $stmt->bindValue(':s', '%' . $query . '%' , PDO::PARAM_INT); $stmt->execute(); $values = $stmt->fetchAll();
  • @彼得。 . .这将为每个位置返回一行,即具有最低 id 的行。
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多