-2

嗨,我正在寻找一种只显示一组匹配的 mysql 结果的方法。谁能告诉我该怎么做?

这是我想要实现的一个例子:

id  |  profile_id  | viewed_profile_id | date_viewed
1          4                7              00:00:00
2          5                6              00:00:00
1          4                7              00:00:00

因此,如果profile_id 和viewed_profile_id 匹配,那么只为那些匹配的列显示一个结果,而不是它在数据库中出现的两倍或三倍或多少次?

4

4 回答 4

4

使用DISTINCT关键字:

SELECT DISTINCT id, profile_id, viewed_profile_id, date_viewed
FROM myTable

这将为所选列的每个唯一组合仅显示一行。


或者,大量阅读您的问题(因为您只想匹配profile_idviewed_profile_id),如果您想显示每个查看者的最新查看日期,您可以使用GROUP BY并选择MAX查看日期。我还假设 date_viewed 中有数据并且它是可排序的:

SELECT profile_id, viewed_profile_id, MAX(date_viewed)
FROM myTable
GROUP BY profile_id, viewed_profile_id
于 2013-03-11T11:34:34.557 回答
0

DISTINCT 有助于消除重复。如果查询返回包含重复行的结果,您可以删除重复项以生成每行都是唯一的结果集。为此,请在 SELECT 之后和输出列列表之前包含关键字 DISTINCT

http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html

于 2013-03-11T11:37:01.813 回答
0
SELECT DISTINCT(` profile_id`),`viewed_profile_id`,`id`,`date_viewed` FROM `tableName` GROUP BY `viewed_profile_id`
于 2013-03-11T11:51:48.603 回答
-1

尝试这个:

$query = "SELECT * FROM TABLENAME WHERE profile_id = '$PROFILEIDVALUE' AND viewed_profile_id = '$VIEWEDIDVALUE' LIMIT 0, 1"

根据您要使用的 ORDER 可以使用 ORDER BY id DESC/ASC

我希望这会有用

于 2013-03-11T11:36:10.647 回答