В очень избирательном запросе MySQL есть ли способ узнать, какое условие не соответствует?Например: если я ищу 12 условий, и мой MySQL возвращает 0, какое из этих 12 условий не соответствует?
SELECT
article.id,
article.name,
GROUP_CONCAT(tags.name order by tags.name) AS nameTags,
GROUP_CONCAT(tags.id order by tags.id) AS idTags,
MAX(IF(article.name LIKE '%var1%',1,0)) AS var1match,
MAX(IF(article.name LIKE '%var2%',1,0)) AS var2match,
and more 10 conditions.
FROM
article
LEFT JOIN ....
LEFT JOIN ....
GROUP BY id
HAVING
(nameTags LIKE '%var1%' OR var1match=1)
AND (nameTags LIKE '%var2%' OR var2match=1)
AND more 10 conditions.
Я имею в виду, сделайте это без 12 однократных обращений, чтобы увидеть, какое из нихничего не дает.
Обновление : есть эволюция
Если я сделаю это:
SELECT
article.id,
MAX(IF(article.name LIKE '%var1%',1,0) AS var1,
MAX(IF(article.name LIKE '%var2%',1,0) AS var2,
MAX(IF(article.name LIKE '%var3%',1,0) AS var3,
FROM
article
LEFT JOIN ....
LEFT JOIN ....
GROUP BY article.id
Я получу таблицу с псевдонимамикак это
|id|var1|var2|var3|
| 1| 0| 0| 1|
| 2| 0| 1| 0|
| 3| 0| 0| 0|
| 4| 0| 1| 1|
Итак, я знаю, что 'var 1' не соответствует условию, потому что все значения столбца равны 0. Как я могу получить возвращение имени этого столбца?
Попытался суммировать значение и получить столбцы, которые sum = 0
.Не знаю, как это сделать.
Обновление: Найдено для этого использование временных таблиц.
1) Создать таблицу tmp:
CREATE TEMPORARY TABLE tmp_tagReport AS
SELECT
article.id,
MAX(IF(article.name LIKE '%var1%',1,0) AS l_var1,
MAX(IF(article.name LIKE '%var2%',1,0) AS l_var2,
MAX(IF(article.name LIKE '%var3%',1,0) AS l_var3,
FROM
article
LEFT JOIN ....
LEFT JOIN ....
GROUP BY article.id
У вас будет что-то вроде этого:
|id|l_var1|l_var2|l_var3|
| 1| 0| 0| 1|
| 2| 0| 1| 0|
| 3| 0| 0| 0|
| 4| 0| 1| 1|
2) Суммируйте значения, и вы будете знать, что столбец с 0 не имеет совпадений
SELECT
SUM(l_var1) as l_var1,
SUM(l_var2) as l_var2,
SUM(l_var3) as l_var3
Вы получитечто-то вроде этого:
|l_var1|l_var2|l_var3|
| 0| 2| 2|
3) Получить имя столбца с value = 0
в PHP
$querySelect = "SELECT
SUM(l_var1) as l_var1,
SUM(l_var2) as l_var2,
SUM(l_var3) as l_var3
";
$result = mysql_query($querySelect);
$arrayUnfound = array_keys(@mysql_fetch_assoc($result), "0");
print_r($arrayUnfound)
4) Это временная таблица, но я добавил таблицу удаления только дляудостоверьтесь и попробуйте освободить память:
mysql_query("DROP TABLE tmp_tagReport; ");
Я нашел способ сделать это, но он все еще должен выполнить 2 или более запросов .Однако я надеюсь, что это может быть полезно.
извините, мой английский
Спасибо