2011-06-09 65 views
0

透視功能我需要實現在一個MySQL表的搜索。它將數據存儲在不同的行中,所以我使用MySQL中的pivot功能來獲取數據。
當我只需要搜索一個值時(表格結構如下),它運行良好。搜索與MySQL中

| id | lead_id | form_id | field_number | value | 
=================================================== 
| 1 | 12 | 12 | 2.3  | John | 
| 2 | 12 | 12 | 4.3  | Dublin | 
| 3 | 13 | 12 | 2.3  | Sam  | 
| 4 | 13 | 12 | 4.3  | Cork | 
| 5 | 16 | 14 | 5   | 897894 | 
| 16 | 16 | 16 | 7   | test | 
| 17 | 12 | 12 | 4.4  | Ireland | 
| 18 | 12 | 12 | 7   | 8899899 | 
| 19 | 13 | 12 | 4.4  | USA  | 
| 20 | 13 | 12 | 7   | 0909902 | 
-------------------------------------------------- 

我用來搜索的初始查詢如下。當我需要僅通過'名稱'搜索時,它運行良好。

SELECT lead_id, 
    MAX(IF(ROUND(`field_number` , 1) = '2.3', value, 0)) AS "Name", 
    MAX(IF(ROUND(`field_number` , 1) = '4.3', value, 0)) AS "City", 
    MAX(IF(ROUND(`field_number` , 1) = '4.4', value, 0)) AS "State", 
    MAX(IF(ROUND(`field_number` , 1) = '7', value, 0)) AS "SSnumber" 
FROM details 
WHERE lead_id IN 
( 
    SELECT DISTINCT lead_id 
    FROM details 
    WHERE 
    (round(`field_number`,1) = '2.3' AND `value` LIKE '%s%') 
    AND form_id = 12 
) 
GROUP BY `lead_id` 

現在我需要實現一個過濾器,按城市,州和pincode進行搜索。
所以我需要對此查詢進行更改,但我沒有得到它正常工作。
我需要添加一個AND條件的搜索按城市,州和pincode過濾,像這樣的東西。

SELECT lead_id, 
    MAX(IF(ROUND(`field_number` , 1) = '2.3', value, 0)) AS "Name", 
    MAX(IF(ROUND(`field_number` , 1) = '4.3', value, 0)) AS "City", 
    MAX(IF(ROUND(`field_number` , 1) = '4.4', value, 0)) AS "State", 
    MAX(IF(ROUND(`field_number` , 1) = '7', value, 0)) AS "SSnumber" 
FROM details 
WHERE lead_id IN 
(
    SELECT DISTINCT lead_id 
    FROM details 
    WHERE 
    (
    (round(`field_number`,1) = '2.3' AND `value` LIKE '%s%') AND 
    (round(`field_number`,1) = '4.3' AND `value` LIKE '%d%') AND 
    (round(`field_number`,1) = '4.4' AND `value` LIKE '%r%') AND 
) 
    AND form_id = 12 
) 
GROUP BY `lead_id` 

這不適用於存儲在不同行中的數據。你可以給我一個建議我分類的方法。

+0

這個查詢一定要慢得要命。 – Johan 2011-06-09 08:36:02

回答

2

我不完全瞭解情況,但要儘量使用子查詢。例如 -

SELECT * FROM (
    SELECT 
    lead_id, 
    MAX(IF(ROUND(field_number, 1) = '2.3', value, 0)) AS 'Name', 
    MAX(IF(ROUND(field_number, 1) = '4.3', value, 0)) AS 'City', 
    MAX(IF(ROUND(field_number, 1) = '4.4', value, 0)) AS 'State', 
    MAX(IF(ROUND(field_number, 1) = '7', value, 0)) AS 'SSnumber' 
    FROM details 
    WHERE form_id = 12 
    GROUP BY lead_id 
) d 
WHERE 
    Name LIKE '%s%' AND City LIKE '%d%' AND State LIKE '%r%'; 
+0

非常感謝。您的查詢解決了我的問題。 – Renjith 2011-06-09 09:19:26

+0

+1,非常聰明(像往常一樣) – Johan 2011-06-09 09:34:39