Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / OR and IN - толи лижы не едут, то ли я... / 5 сообщений из 5, страница 1 из 1
23.06.2017, 14:24
    #39476765
SovaBarmak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OR and IN - толи лижы не едут, то ли я...
имеется 2 запроса
Код: plsql
1.
2.
3.
4.
5.
6.
select distinct t.term_id,t.name from snt_terms t
inner join snt_term_taxonomy tt on t.term_id = tt.term_id
inner join snt_term_relationships tr1 on tr1.term_taxonomy_id=t.term_id
inner join snt_term_relationships tr2 on tr2.object_id= tr1.object_id
inner join snt_term_relationships tr3 on tr3.object_id= tr1.object_id
where taxonomy = 'collection' AND (tr3.term_taxonomy_id IN('53,326,374,1904')) AND tr2.term_taxonomy_id=222


и
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT DISTINCT t.term_id, t.name
FROM snt_terms t
INNER JOIN snt_term_taxonomy tt ON t.term_id = tt.term_id
INNER JOIN snt_term_relationships tr1 ON tr1.term_taxonomy_id = t.term_id
INNER JOIN snt_term_relationships tr2 ON tr2.object_id = tr1.object_id
INNER JOIN snt_term_relationships tr3 ON tr3.object_id = tr1.object_id
WHERE taxonomy = 'collection'
AND (tr3.term_taxonomy_id=23 OR tr3.term_taxonomy_id =326 OR tr3.term_taxonomy_id=374 OR tr3.term_taxonomy_id=1904)
AND tr2.term_taxonomy_id =222



как я понимаю это 2 идентичных запроса(читал такое в книге, даже снова открыл и прочитал) но почему они выдают разный результат?
...
Рейтинг: 0 / 0
23.06.2017, 14:27
    #39476766
Darkripple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OR and IN - толи лижы не едут, то ли я...
SovaBarmak,
как же они могут быть идентичны?
(tr3.term_taxonomy_id IN('53,...)) и (tr3.term_taxonomy_id=23 ...)
...
Рейтинг: 0 / 0
23.06.2017, 14:36
    #39476768
Darkripple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OR and IN - толи лижы не едут, то ли я...
что то я сегодня плохо дружу с головой.. не заметил сразу..
могу ошибаться (Akina если что меня поправит :-) ),
но в условии tr3.term_taxonomy_id IN ('53,326,374,1904') поле term_taxonomy_id сравнивается со строкой, а не с массивом чисел. и эта строка неявно превращается в число 53.
по крайней мере так говорят мне тесты
Код: sql
1.
2.
select * from (select 1 aa union all select 2 union all select 3 union all select 4 union all select 5) q
where aa in ('3,2')

совсем разные вещи с
Код: sql
1.
2.
select * from (select 1 aa union all select 2 union all select 3 union all select 4 union all select 5) q
where aa in (2,3)

а в какой книге написано обратное?
может имелось в виду tr3.term_taxonomy_id IN ('53','326','374','1904') или хотя бы tr3.term_taxonomy_id IN (53,326,374,1904)?
...
Рейтинг: 0 / 0
23.06.2017, 14:37
    #39476769
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OR and IN - толи лижы не едут, то ли я...
SovaBarmak
Код: sql
1.
AND (tr3.term_taxonomy_id IN('53,326,374,1904'))


Вы понимаете, что ищете значение tr3.term_taxonomy_id не среди 4 значений из списка, а равное одному этому литералу с 4 числами?

Так что эти запросы (да ещё с учётом мнения предыдущего оратора) не то что идентичны - вообще рядом не стояли.
...
Рейтинг: 0 / 0
23.06.2017, 14:40
    #39476773
SovaBarmak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OR and IN - толи лижы не едут, то ли я...
понял, большое всем спс, а то я я уже думал что все мне
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / OR and IN - толи лижы не едут, то ли я... / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]