Знайте, какое условие не соответствовало в mysql consult - PullRequest
1 голос
/ 18 марта 2012

В очень избирательном запросе 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 или более запросов .Однако я надеюсь, что это может быть полезно.

извините, мой английский

Спасибо

...