Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Объединить два запроса в один
 
 автор: UshkiNaMakushke   (29.02.2008 в 13:46)   письмо автору
 
 

У меня следующая проблема, щас попробую сформулировать , напрмиер, (если из далека) есть два запроса
select drug_id from t_friends Where user_id=1
select drug_id from t_friends Where user_id=2
вот мне надо как то их объеденить и вообще возможно это сделать одиним запосом? что бы возвращлись тока те drug_id которые являются общими для первого запроса и второго ,
т.е. задача следующая надо найти общих друзей пользователя 1 и пользовател 2

   
 
 автор: KirillKiev   (29.02.2008 в 14:05)   письмо автору
 
   для: UshkiNaMakushke   (29.02.2008 в 13:46)
 

select
 drug_id 
from t_friends 
Where 
  user_id=1 
  OR
  user_id=2

   
 
 автор: UshkiNaMakushke   (29.02.2008 в 14:17)   письмо автору
 
   для: KirillKiev   (29.02.2008 в 14:05)
 

блин я ж русским языком написала так и знала не поймут, таким макаром он вернет мне все подряд а мне надо не так если я напишу так как вы сказли то получиться например
user id _____ drug_id
1 ___________3
1___________ 4
2 ___________3
2___________5


вот мне же надо что б запрос вернул тока общих друзей т.е. в данном случае

user id _____ drug_id
1 ___________3
2 ___________ 3

   
 
 автор: KirillKiev   (29.02.2008 в 14:55)   письмо автору
 
   для: UshkiNaMakushke   (29.02.2008 в 14:17)
 

структуру таблиц дайте.. ничего не понятно

   
 
 автор: UshkiNaMakushke   (29.02.2008 в 14:58)   письмо автору
 
   для: KirillKiev   (29.02.2008 в 14:55)
 

DROP TABLE IF EXISTS `t_friends`;
CREATE TABLE `t_friends` (
`friend_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`drug_id` int(11) NOT NULL default '0',
`flag` tinyint(3) NOT NULL default '0',
`data` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`friend_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

#
# Dumping data for table t_friends
#

INSERT INTO `t_friends` VALUES (1,1,2,1,'2008-02-27 16:54:51');
INSERT INTO `t_friends` VALUES (2,2,1,1,'0000-00-00 00:00:00');
INSERT INTO `t_friends` VALUES (3,3,1,1,'2008-02-29 11:03:19');
INSERT INTO `t_friends` VALUES (4,3,2,1,'2008-02-29 11:07:11');
INSERT INTO `t_friends` VALUES (5,1,3,1,'0000-00-00 00:00:00');
INSERT INTO `t_friends` VALUES (6,2,3,1,'0000-00-00 00:00:00');

   
 
 автор: KirillKiev   (29.02.2008 в 15:17)   письмо автору
 
   для: UshkiNaMakushke   (29.02.2008 в 14:58)
 

Если перебирать все возможные варианты то так

select distinct
t1.user_id,
t1.drug_id 
from
t_friends as t1,
t_friends as t2
Where 
t1.user_id != t2.user_id
and
t1.drug_id = t2.drug_id
order by drug_id

   
 
 автор: UshkiNaMakushke   (29.02.2008 в 15:26)   письмо автору
 
   для: KirillKiev   (29.02.2008 в 15:17)
 

если переберать вес овзможэные варианты то можно шизнуться, пользоватлей то много) ну просто это как на одноклассниках на сайте вконтакте ты заходишь на страницу к пользоватлю и смотришь его друзей, смотришь друзей которые он лайин, вот еще можно смотреть ваших общих друзей) вот мне и нужен запрос который между 2 полязователями устанавливает общих друзей, если такое вообще возможно сделать одни запросом

   
 
 автор: KirillKiev   (29.02.2008 в 15:55)   письмо автору
 
   для: UshkiNaMakushke   (29.02.2008 в 15:26)
 

ну можно так
типа пользователи 1 и 2

select distinct
t1.user_id,
t1.drug_id 
from
t_friends as t1,
t_friends as t2
Where 
t1.user_id != t2.user_id
and
t1.drug_id = t2.drug_id
and
(
t1.user_id = 2
or
t1.user_id = 1
)
and
(
t2.user_id = 2
or
t2.user_id = 1
)
order by user_id

может можно и попроще.. но чет я навскидку не скажу
а если убрать t1.user_id, и order by user_id (бо ругаться будет) - выведет только id друзей...

   
 
 автор: UshkiNaMakushke   (29.02.2008 в 17:13)   письмо автору
 
   для: KirillKiev   (29.02.2008 в 15:55)
 

ОО круто пасиб сработало)))

   
 
 автор: UshkiNaMakushke   (06.03.2008 в 11:49)   письмо автору
 
   для: UshkiNaMakushke   (29.02.2008 в 17:13)
 

)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования