0

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

我使用 $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 数据库中一些条目的副本。

我怎样才能解决这个问题?

4

2 回答 2

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

或者你也可以像这样使用 join 语句:

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
于 2012-10-20T04:17:15.443 回答
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 表之间有任何关系,最好在这些字段上加入它们而不是做笛卡尔积。

于 2012-10-20T03:05:19.750 回答