我有这个查询从两个不同的数据库中获取信息:
我使用$ 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数据库中某些条目的副本。
我该如何解决这个问题?
答案 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