2013-11-28 112 views
2

我需要在同一字段中搜索兩個值。需要在一個字段中搜索兩個值Mysql

╔════╦════════════╦══════════════╗ 
║ ID ║ Meta_key ║ Meta_value ║ 
╠════╬════════════╬══════════════╣ 
║ 1 ║ first_name ║ pritesh ║ 
║ 2 ║ last_name ║ mahajan ║ 
║ 3 ║ first_name ║ ritesh ║ 
║ 4 ║ last_name ║ jain  ║ 
║ 5 ║ first_name ║ john  ║ 
║ 6 ║ last_name ║ a   ║ 
║ 7 ║ first_name ║ Mambo  ║ 
║ 8 ║ last_name ║ Nombo  ║ 
╚════╩════════════╩══════════════╝ 

這是我的表,我想搜索所有的名字和姓氏。以下是我的查詢,但這不會返回我想要的。

SELECT * 
FROM `wp_usermeta` 
WHERE `meta_key` = 'last_name' 
    AND `meta_value` LIKE '%mahajan%' 
    AND `meta_key` = 'first_name' 
    AND `meta_value` LIKE '%a%'; 
+3

你有許多姓和名的,但怎麼也姓氏和名字連接爲一個人? –

+1

查詢無法正常工作,因爲您在同一時間搜索的是'Meta_Key'列的值爲'first_name' *和*'last_name'的行。它看起來像一個格式錯誤的表結構,因爲名字和姓氏沒有相互關聯。 – Matten

+0

是的,如果可能的話,請檢查WordPress的usermeta表。 –

回答

2

在這裏你去

SQL Fiddle

查詢

SELECT first_name, last_name 
FROM 
    (
    (
     SELECT meta_value AS first_name, id AS a_id 
     FROM wp_usermeta 
     WHERE meta_name = 'first_name' 
    ) as a 
) 
JOIN 
    (
    (
     SELECT meta_value AS last_name, id AS b_id 
     FROM wp_usermeta 
     WHERE meta_name = 'last_name' 
    ) as b 
) 
WHERE a_id = b_id-1 

Results

| FIRST_NAME | LAST_NAME | 
|------------|-----------| 
| pritesh | mahajan | 
|  ritesh |  jain | 
|  john |   a | 
|  Mambo |  Nombo | 

隨着THI s,您可以使用兩個虛擬列first_namelast_name輕鬆搜索。您只需要爲WHERE條款添加附加條件。是這樣的:

WHERE a_id = b_id-1 
    AND first_name LIKE "%tesh%" 
    AND last_name LIKE "%jai%" 

會產生

| FIRST_NAME | LAST_NAME | 
|------------|-----------| 
|  ritesh |  jain | 

注意

(根據您的樣本數據)大假設我在這裏提出的是,相關first_namelast_name總是會有連續的id's。 (表中連續兩個記錄)。

+0

可否請讓我知道我如何添加新的連接,因爲我想爲電子郵件ID添加新的連接。電子郵件ID來自其他表格,我們將使用現有表格的ID來獲取電子郵件ID。 –

2

你可以試試這個,

SELECT * FROM `wp_usermeta` WHERE (`meta_key` = 'last_name' OR `meta_key` = 'first_name') and (`meta_value` LIKE '%mahajan%' OR `meta_value` LIKE '%a%') 
+0

上述查詢中的條件爲「first_name =%mahajan%或first_name =%a%或last_name =%mahajan%或last_name =%a%」。我不認爲這是你想要的。 – Matten

+0

你是偉大的:)(派對) –

+0

這個查詢正在工作,但當姓氏正在得到,那麼它不會按名字搜索,因爲我們使用OR條件.. –

0

我認爲,兩行必須共享相同的密鑰。也許它是IDuser_id(在你的問題中沒有顯示?)。如果是這種情況,您可以使用此查詢返回您正在查找的ID:

SELECT ID 
FROM `wp_usermeta` 
WHERE 
    (`meta_key` = 'last_name' AND `meta_value` LIKE '%mahajan%') 
    OR (`meta_key` = 'first_name' AND `meta_value` LIKE '%a%) 
GROUP BY ID 
HAVING COUNT(*)=2 

請將ID替換爲實際ID。

+0

'meta_key'到底是'first_name'還是last_name '爲同一行?你可能打算把'OR'放在父母之間。不是'AND'。 –

+3

然後id不是主鍵。那真的是WP怎麼做的?非常草率的數據庫架構。 –

+0

WP說實話...... -_- – itachi

0

架構

CREATE TABLE wp_usermeta 
    (
    id int auto_increment primary key, 
    meta_name varchar(20), 
    meta_value varchar(30) 
    ); 

INSERT INTO wp_usermeta 
(meta_name, meta_value) 
VALUES 
('first_name', 'pritesh'), 
('last_name', 'mahajan'), 
('first_name', 'ritesh'), 
('last_name', 'jain'), 
('first_name', 'john'), 
('last_name', 'a'), 
('first_name', 'Mambo'), 
('last_name', 'Nombo'); 

和查詢應該是這樣的....

SELECT meta_name, meta_value 
FROM wp_usermeta 
WHERE 
(meta_name = 'last_name' AND meta_value LIKE '%mahajan%') 
    OR 
(meta_name = 'first_name' AND meta_value LIKE '%a%'); 
相關問題