如何从多次包含此值的表中仅获取 1 个结果?

Posted

技术标签:

【中文标题】如何从多次包含此值的表中仅获取 1 个结果?【英文标题】:How to get only 1 result from a table that contain this value more than once? 【发布时间】: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 , 使用有什么问题吗? 【参考方案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 的行。

以上是关于如何从多次包含此值的表中仅获取 1 个结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PostgreSQL 中仅获取数据库的表名

如何在 QTableWidget 中仅获取包含值的行/列数?

使用 group by 从一个包含批量记录的表中获取一些统计数据并将结果放入第二个表中

Laravel Eloquent:如何从连接表中仅获取某些列

从具有特定值的表中获取列名

如何从两个不同的、不相关的表中获取最新的行,并将它们合并到一个结果集中?