MySQL接收重复的条目

时间:2012-10-20 03:01:19

标签: mysql join duplicates

我有这个查询从两个不同的数据库中获取信息:

我使用$ query作为查询字符串。

SELECT 
    blurbs.text,
    blurbs.timestamp,
    users.name,
    users.username,
    users.profilepic,
    users.id 
FROM 
    blurbs, users 
WHERE 
    (LOWER(blurbs.text) LIKE '%$query%' 
OR  LOWER(users.name) LIKE '%$query%') 
AND blurbs.is_private=0 
LIMIT 0,30

我正在接收blurbs数据库中某些条目的副本。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以按如下方式选择DISTINCT记录:

SELECT DISTINCT
    blurbs.text,
    blurbs.timestamp,
    users.name,
    users.username,
    users.profilepic,
    users.id 
FROM 
    blurbs, users 
WHERE 
    (LOWER(blurbs.text) LIKE '%$query%' 
OR  LOWER(users.name) LIKE '%$query%') 
AND blurbs.is_private=0 
LIMIT 0,30

另外,如果你在blurbs表和users表之间有任何关系,最好在这些字段上加入它们而不是做笛卡尔积。

答案 1 :(得分:0)

您还没有加入这两个表。您需要加入类似users.id = blurbs.userid

的内容

所以你的查询应该是:

SELECT 
    blurbs.text,
    blurbs.timestamp,
    users.name,
    users.username,
    users.profilepic,
    users.id 
FROM 
    blurbs, users 
WHERE
    users.id = blurbs.userid
AND (LOWER(blurbs.text) LIKE '%$query%' 
     OR  LOWER(users.name) LIKE '%$query%') 
AND blurbs.is_private=0 
LIMIT 0,30

或者你也可以使用这样的连接语句:

SELECT 
    blurbs.text,
    blurbs.timestamp,
    users.name,
    users.username,
    users.profilepic,
    users.id 
FROM 
    blurbs JOIN users ON users.id = blurbs.userid
WHERE
     (LOWER(blurbs.text) LIKE '%$query%' 
     OR  LOWER(users.name) LIKE '%$query%') 
AND blurbs.is_private=0 
LIMIT 0,30