2012-04-23 47 views
1

我有一個MySQL表,我試圖通過他的全名找到一個人。問題是,如這裏的姓氏和名字都存儲在表中分成兩行顯示:MySQL在兩行中找到全名

+-----------------+-------------+-------------+--------------+ 
| submit_time  | form_name | field_name | field_value | 
+-----------------+-------------+-------------+--------------+ 
| 1323463601.0947 | Online Form | firstname | Paulo  | 
| 1323463601.0947 | Online Form | lastname | Hill   | 
+-----------------+-------------+-------------+--------------+ 

我怎樣才能構建一個查詢,會得到一個結果(如果可能)通過搜索聖保羅山?

另外,submit_time列應該對兩行具有相同的值 - 這將是表中唯一的一列值。

+0

看起來像只是我看不到任何實體ID爲兩排連接在一起的EAV數據模型。這些都是專欄嗎? – 2012-04-23 21:14:32

+0

如果'submit_time'在每一行中都是相同的,那它怎麼可能在表中是唯一的呢?你確定兩種表格不能同時進行匯款嗎? – Madbreaks 2012-04-23 21:23:44

回答

4

你可以使用一個自連接:

SELECT t1.submit_time, t1.field_value, t2.field_value 
FROM your_table t1 
INNER JOIN your_table t2 ON t2.submit_time = t1.submit_time 
WHERE t1.field_name = 'firstname' 
AND t1.field_value = 'Paulo' 
AND t2.field_name = 'lastname' 
AND t2.field_value = 'Hill' 
+0

@PabloSantaCruz'Paulo Hill'是搜索字詞。 ......你的意思是什麼? – 2012-04-23 21:15:22

+0

你說得對。我不知道我在想什麼... – 2012-04-23 21:17:08

2

假設'paulo hill'是一個單一的搜索查詢:

SELECT t1.*, 
      t2.field_value 
     FROM tbl t1 
INNER JOIN tbl t2 ON t1.submit_time = t2.submit_time 
     AND t2.field_name = 'lastname' 
    WHERE t1.field_name = 'firstname' 
     AND t1.field_value || ' ' || t2.field_value = 'paulo hill' 

注意:此方法是敏感的搜索查詢達的姓和名之間的空間

+0

您的第一個查詢會找到「Paulo Hill」,但由於您不限制field_name,因此可能會得到誤報,例如名爲「Paulo」的名爲「Jonah Hill」的人或名爲「Paulo Smith」的人生活在一座「山丘」等。 – 2012-04-23 21:23:23

+0

@Ike Walker:是的,那麼刪除它,因爲它不是一個答案無論如何 – zerkms 2012-04-23 21:24:42

1

試試這個:

SELECT * FROM (
    SELECT submit_time, group_concat(field_value SEPARATOR ' ') AS fullname 
    FROM TABLE_NAME 
    GROUP BY `submit_time` 
) AS innertable 
WHERE fullname='Paulo Hill' 
+0

「group by」沒有定義其他列的順序 – zerkms 2012-04-23 21:45:11

0

一種替代方法是使用GROUP_CONCAT如果你知道的順序:

SELECT GROUP_CONCAT(field_value SEPARATOR ' ') 
FROM tab 
GROUP BY submit_time 
HAVING GROUP_CONCAT(field_value ORDER BY field_id ASC) LIKE '%Paulo,Hill%' 
+0

「group by」沒有定義其他列的順序 – zerkms 2012-04-23 21:45:20