berkut
Новичок
объеденение с таблицей, созданной подзапросом
Есть 2 таблицы:
users.total_friends - это грубо говоря лимит, сколько у юзера может быть друзей максимум. В таблице users_friends хранятся уже друзья. users_friends.user_id - это внешний ключ к users.id
Хочу выяснить, сколько ещё друзей может поиметь юзер.
Так вот, в поле to_load всегда Null!!! Козалось-бы, косяк в запросе, но u.*, temp.* же работают. А почему не может вычесть 2 поля это вопрос
-~{}~ 12.04.07 01:41:
LEFT JOIN в данной ситуации можно поменять на inner, всё равно будет выдаваться кол-во строк из users с to_load содержащим везде NULL. total_friends как видно объявленно как NOT NULL.
В догонку тогда ещё вопрос. У юзера в данный момент времени вообще может и не быть друзей(в users_friends). Тогда left join поставит null и вся арифметика накроется медным тазом. Вместо лимита будет стоять null, ибо 5 - Null == null
Есть 2 таблицы:
Код:
CREATE TABLE `users` (
`id` smallint(6) unsigned NOT NULL auto_increment,
`total_friends` smallint(6) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
CREATE TABLE `users_friends` (
`user_id` smallint(9) unsigned NOT NULL default '0'
) ENGINE=MyISAM;
Хочу выяснить, сколько ещё друзей может поиметь юзер.
Код:
SELECT u.total_friends - temp.friends AS to_load, u.*, temp.*
FROM users u
LEFT JOIN
(
SELECT COUNT(*) AS friends, user_id
FROM users_friends
GROUP BY user_id
) temp ON u.id = temp.user_id
-~{}~ 12.04.07 01:41:
LEFT JOIN в данной ситуации можно поменять на inner, всё равно будет выдаваться кол-во строк из users с to_load содержащим везде NULL. total_friends как видно объявленно как NOT NULL.
В догонку тогда ещё вопрос. У юзера в данный момент времени вообще может и не быть друзей(в users_friends). Тогда left join поставит null и вся арифметика накроется медным тазом. Вместо лимита будет стоять null, ибо 5 - Null == null