如何从多次包含此值的表中仅获取 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 个结果?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QTableWidget 中仅获取包含值的行/列数?
使用 group by 从一个包含批量记录的表中获取一些统计数据并将结果放入第二个表中