Мне нужно реализовать поиск в таблице MySQL. Он хранит данные в разных строках, поэтому я использовал функцию сводки в 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`
Теперь мне нужно внедрить фильтр для поиска по городу, штату и пин-коду.
Поэтому мне нужно внести изменения в этот запрос, но я не могу заставить его работать правильно.
Мне нужно добавить условие И для поиска, чтобы фильтровать по городу, штату и пин-коду, что-то вроде этого.
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`
Это не работает, поскольку данные хранятся в разных строках. Не могли бы вы предложить мне способ сортировки.