×

Как сделать поиск по двум различным ключам одного поля таблицы базы данных MySQL

Если вам надо найти условие по двум разным ключам в одном столбце базы данных SQL – тогда сделайте следующее:

  1. Составьте запрос по первому ключу «Запрос1»;
  2. Составьте запрос по второму ключу «Запрос2»;
  3. Составьте объединенный запрос способом JOIN по следующему шаблону:
SELECT поле1, поле.id FROM (Запрос1) AS z1, (Запрос2) AS z2
 
КАК ПРОИЗВЕСТИ ПОИСК ПО ДВУМ РАЗЛИЧНЫМ КЛЮЧАМ БАЗЫ ДАННЫХ MYSQL?

Пример:

Имеем два запроса –

SELECT sum(`uniq_amount`) AS good FROM `stats_in` WHERE (country_code IN ('US','DE')) AND (`referer_id` IN (1,3,4)) AND `date` = '2014-02-20'

и

SELECT sum(`uniq_amount`) AS bad FROM `stats_in` WHERE (NOT country_code IN ('US','DE')) AND (`referer_id` IN (1,3,4)) AND `date` = '2014-02-20'

Получаем объединение по строкам –

SELECT sum(IF(country_code IN ('US','DE'),`uniq_amount`,0)) AS good, sum(IF(country_code NOT IN ('US','DE'),`uniq_amount`,0)) AS bad FROM `stats_in` WHERE (`referer_id` IN (1,3,4))AND `date` = '2014-02-20'

P.S. Вот такое – белее серьезное объединение с бородой проверок рабочее

SELECT contentid, value2 FROM (SELECT  `TlVR`.`contentid` AS contentid, `TlVR`.`value` AS value1, `TlV`.`id` AS pid, `TlV`.`name` AS name1 FROM `modx_site_content` AS `Ticket` RIGHT JOIN `modx_site_tmplvar_contentvalues` `TlVR` ON `TlVR`.`contentid` = `Ticket`.`id` RIGHT JOIN `modx_site_tmplvars` `TlV` ON `TlV`.`id` = `TlVR`.`tmplvarid` WHERE ( `Ticket`.`class_key` = 'Ticket' AND ( `TlVR`.`value` = 'Включить') AND `TlVR`.`contentid` = `Ticket`.`id` AND `Ticket`.`parent` = 14 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 ) ORDER BY Ticket.createdon DESC) AS t1, (SELECT  `TlVR`.`contentid` AS contentid1, `TlVR`.`value` AS value2, `TlV`.`id` AS tid, `TlV`.`name` AS name2 FROM `modx_site_content` AS `Ticket` RIGHT JOIN `modx_site_tmplvar_contentvalues` `TlVR` ON `TlVR`.`contentid` = `Ticket`.`id` RIGHT JOIN `modx_site_tmplvars` `TlV` ON `TlV`.`id` = `TlVR`.`tmplvarid` WHERE ( `Ticket`.`class_key` = 'Ticket' AND ( (`TlVR`.`value` LIKE '%Баня%' AND `TlV`.`name` REGEXP '^titlebutton') OR (`TlVR`.`value` LIKE '%Сауна%' AND `TlV`.`name` REGEXP '^titlebutton') ) AND `TlVR`.`contentid` = `Ticket`.`id` AND `Ticket`.`parent` = 14 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 ) ORDER BY Ticket.createdon DESC) AS t2 WHERE ( contentid = contentid1 AND RIGHT (name1,1) = RIGHT (name2,1))

Здесь использовано:

  • `TlVR`.`value` LIKE '%Сауна%' – нахождение части строки;
  • `TlV`.`name` REGEXP '^titlebutton' - сравнение начала выражения по шаблону.
01 сентября 2016, 23:46    Вечерний Минск    510

Комментарии ()