2011-05-18 70 views
0

目前我正在一個Wordpress網站上工作,我希望能夠在我的網站上搜索用戶名字和姓氏。加入多行搜索查詢

Wordpress利用元表來存儲用戶的任何「額外」數據。第一個和最後一個名字是這些元字段中的一部分。

現在我正在嘗試創建一個查詢,它使我得到一個結果,它返回一個匹配姓和名的用戶,唯一的問題是有一個元行用於姓和另一個用於名字,它們都具有對同一個user_id的引用。只有我不知道如何正確創建查詢。

當我有這個疑問

SELECT U.id FROM wp_users AS U, wp_usermeta as US 
WHERE U.id=US.user_id 
AND (US.meta_key='first_name' AND US.meta_value='MyFirstName') 

它不會返回我要找的用戶,但是當我嘗試這個

SELECT U.id FROM wp_users AS U, wp_usermeta as US 
WHERE U.id=US.user_id 
AND (US.meta_key='first_name' AND US.meta_value='MyFirstName') 
AND (US.meta_key='last_name' AND US.meta_value='Dijkstra') 

我沒有得到任何結果可言,可能有人幫助我嗎?

如果有人對數據庫結構感興趣,這裏(http://cl.ly/6rGx)是用戶表,這裏(http://cl.ly/6rts)是users_meta表。

在此先感謝

回答

2

你不能在同一時間加入一個行到另一個表中的其他兩行,所以你需要加入其他表兩次,一次第一名和一次姓。就像這樣:

SELECT U.id 
FROM wp_users AS U 
inner join wp_usermeta as UMF on U.id = UMF.user_id 
inner join wp_usermeta as UML on U.id = UML.user_id 
WHERE UMF.meta_key = 'first_name' 
    AND UMF.meta_value = 'MyFirstName' 
    AND UML.meta_key = 'last_name' 
    AND UML.meta_value = 'Dijkstra' 
+0

完美的作品,感謝,他們應該給你一枚獎牌爲:) – Matthijn 2011-05-18 19:58:07

0

考慮通過重新編寫AND S的順序邏輯(不,括號不作區別)。

US.meta_key='first_name' AND US.meta_key='last_name' AND 
US.meta_value='MyFirstName' AND US.meta_value='Dijkstra' 

看到問題了嗎?這種情況永遠不會是真的,因爲US.meta_keyUS.meta_value都不會是兩個值。您需要使用OR,而不是和AND

編輯

這樣的查詢會給你想要的結果:

SELECT U.id FROM wp_users AS U, wp_usermeta as US 
WHERE U.id=US.user_id AND (
    (US.meta_key='first_name' AND US.meta_value='MyFirstName') 
    OR (US.meta_key='last_name' AND US.meta_value='Dijkstra')) 
+0

我見,有一個AND太多了,但是如果我是正確的,它會搜索具有任何這些條件的用戶,並且我想要這兩個,謝謝。 – Matthijn 2011-05-18 19:59:33

+0

@Matthijn:不,使用策略性放置的或它會工作得很好。查看我的待處理編輯。 – 2011-05-18 20:24:23

+0

nope,這將無法正常工作......如果有多個Dijkstras或MyFirstNames,您可以將它們全部取出。 – Fosco 2011-05-19 13:26:02

0

你需要加入兩次,爲每個不同的條件。條件可以在WHERE子句中作爲RedFilter的建議,但我更喜歡JOIN子句中的複合條件以提高可讀性。

SELECT U.id 
FROM wp_users U 
join wp_usermeta f on U.id = f.id 
        and f.meta_key='first_name' 
        and f.meta_value='MyFirstName' 
join wp_usermeta l on U.id = l.id 
        and l.meta_key='last_name' 
        and l.meta_value='Dijkstra' 

略有不同版本中的鍵聯接和WHERE子句中的請求的值:

SELECT U.id 
FROM wp_users U 
join wp_usermeta f on U.id = f.id and f.meta_key='first_name' 
join wp_usermeta l on U.id = l.id and l.meta_key='last_name' 
where f.meta_value='MyFirstName' and l.meta_value='Dijkstra'