0

2つの異なるデータベースから情報を取得するこのクエリがあります。

クエリ文字列として$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

宣伝文データベースの一部のエントリの重複を受け取っています。

どうすればこれを修正できますか?

4

2 に答える 2

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

また、宣伝文句テーブルとユーザーテーブルの間に何らかの関係がある場合は、デカルト積を実行するよりも、それらのフィールドでそれらを結合することをお勧めします。

于 2012-10-20T03:05:19.750 に答える
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
于 2012-10-20T04:17:15.443 に答える