MYSQL непонятки с полученными данными

M
На сайте с 20.08.2004
Offline
376
553

Друзья, имеем вот такой запрос

SELECT tc.* , t.user_id FROM `talk_city` tc LEFT JOIN talk t ON t.talk_id = tc.talk_id where tc.talk_id >= 39483 && tc.talk_id <= 40037

результат

Отображение строк 0 - 24 (545 всего, Запрос занял 0.0003 сек.)

ДАЛЬШЕ вот такой запрос

SELECT tc.* , t.user_id FROM `talk_city` tc LEFT JOIN talk t ON t.talk_id = tc.talk_id where tc.talk_id >= 39483 && tc.talk_id <= 40037 && t.user_id <> 43669

Отображение строк 0 - 24 (516 всего, Запрос занял 0.0003 сек.)

Логично предположить что user_id = 43669 будут записи 545 - 516 = 29

Но...

SELECT tc.* , t.user_id FROM `talk_city` tc LEFT JOIN talk t ON t.talk_id = tc.talk_id where tc.talk_id >= 39483 && tc.talk_id <= 40037 && t.user_id = 43669

MySQL вернула пустой результат (т.е. ноль строк). (Запрос занял 0.0002 сек.)

Как такое может быть?

отец сыночка, лапочки дочки и еще одного сыночка
bukachuk
На сайте с 07.09.2008
Offline
97
#1
Логично предположить что user_id = 43669 будут записи 545 - 516 = 29

Следующий запрос это предположение опровергает, условие "не равно 43669" не дает гарантии, что в исключенном множестве есть записи с "= 43669"

Программирование PHP,Mysql (/ru/forum/934470)
M
На сайте с 20.08.2004
Offline
376
#2
bukachuk:
Следующий запрос это предположение опровергает, условие "не равно 43669" не дает гарантии, что в исключенном множестве есть записи с "= 43669"

первые два дают!

есть множество от 39483 до 40037, будем считать это единым целым, для упрощения (и к примеру 1000 записей)

значит делаем обычный селект получаем 1000 записей.

дальше пишем, есть ли среди тех тем, темы котрая не равна, к примеру 1.

<>1 , те отображаем все темы которые не равны 1

к примеру их 990.

а значит 10 этих тем будут с id=1

а значит при селекте =1 будет выведено 10 записей.

что хотели сказать вы я не понял.

bukachuk
На сайте с 07.09.2008
Offline
97
#3

SELECT * FROM talk t WHERE t.user_id = 43669 AND t.talk_id >= 39483 AND t.talk_id <= 40037;

Такой запрос что отдает?

ДП
На сайте с 23.11.2009
Offline
203
#4

У вас таблица t через LEFT JOIN джойнится, там просто null будет в некоторых записях. Попробуйте условие is null. Хотя не уверен.

M
На сайте с 20.08.2004
Offline
376
#5

тему можно закрыть. спасибо.

модераторы удалите пожалуйста.

siv1987
На сайте с 02.04.2009
Offline
427
#6
bukachuk:
условие "не равно 43669" не дает гарантии, что в исключенном множестве есть записи с "= 43669"

Запросы аналогичны за исключением "не равно 43669", почему же тогда количество строк разные?

ТС, ждем комментарий.

M
На сайте с 20.08.2004
Offline
376
#7
siv1987:
Запросы аналогичны за исключением "не равно 43669", почему же тогда количество строк разные?

ТС, ждем комментарий.

мне стыдно, в запросе у меня айди 43669 а поиск проводил по 43699

а в остальном прав предыдущий оратор

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий