Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Запрос не выдаёт всех данных


Автор: animegirl 20.12.2012, 22:08
Таблицы

Код

CREATE TABLE IF NOT EXISTS `user_friends` (
   `uid` int(10) unsigned NOT NULL,
   `group_id` tinyint(3) unsigned NOT NULL,
   `friends_ids` mediumtext COLLATE utf8_unicode_ci,
   `group_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
   PRIMARY KEY (`uid`,`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `user_profile`
--

CREATE TABLE IF NOT EXISTS `user_profile` (
   `uid` int(10) unsigned NOT NULL,
   `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
   `phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
   `nickname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
   PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


  

Запрос

Код

SELECT *
FROM `way`.`user_friends`
RIGHT JOIN `way`.`user_profile` ON `user_profile`.`uid`
IN (
 `user_friends`.`friends_ids`
)
WHERE `user_friends`.`uid` =118


Результат

Код

uid     group_id     friends_ids     group_name     uid     email             phone         nickname 
118    1    97,116,117    NULL        97    none            none        aaa
118    2    116        dfgfdgf        116    [email protected]    NULL        iadshtf


По моим представлениям, тут не хватает ещё 2 строчек, где group_id был бы 1, а uid 116 и 117

Автор: skyboy 20.12.2012, 23:16
странно, что из соединения пустых таблиц ты аж две записи в результате получаешь  smile 

Автор: tzirechnoy 21.12.2012, 10:22
Цитата
странно, что из соединения пустых таблиц ты аж две записи в результате получаешь


+1

Автор: Akina 21.12.2012, 11:09
Код

ON `user_profile`.`uid`
IN (
 `user_friends`.`friends_ids`
   )

Как по-Вашему, какие записи при этом будут сопоставлены друг другу? 

Цитата(animegirl @  20.12.2012,  23:08 Найти цитируемый пост)
тут не хватает ещё 2 строчек, где group_id был бы 1, а uid 116 и 117

и связаны с записью, где friends_ids='97,116,117'? Чёрта с два! ну надо же не только маны читать, и при этом хоть немного думать...

Автор: animegirl 29.12.2012, 23:29
Цитата(Akina @  21.12.2012,  11:09 Найти цитируемый пост)
Как по-Вашему, какие записи при этом будут сопоставлены друг другу? 

В friends_ids список uid через запятую, как и в вами упомянутом мануале, именно так их надо вроде как скармливать в IN

Автор: Akina 30.12.2012, 22:02
animegirl, но только одна мелочь - в виде ЛИТЕРАЛА. А не в виде значения поля.
Постарайтесь понять, что это две принципиально разные вещи. Хотя и выглядят внешне одинаково.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)