2012-10-20 112 views
0

我有這個查詢是從兩個不同的數據庫中獲取信息:MySQL接收重複條目

我使用$ 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

添加blurbs.user_id = user.id去哪裏? –

+0

謝謝,實際上完美的工作! –

回答

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 
0

您可以選擇不重複的記錄如下:

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表和用戶表之間的任何關係,這是更好地加入他們不是做一個笛卡爾積這些領域。

+0

那麼在blurb和users表之間有相似的字段,但它們在查詢中沒有被引用。我還不是很擅長加入。你能提供一個例子嗎? –

+0

無論是選擇還是過濾,如果這些字段是這兩個表之間的關係的一部分,那麼聯合就會有效,因爲這將減少應用過濾器的工作表中的記錄數。 – Vikdor