Показать сообщение отдельно
  #39 (permalink)  
Старый 29.01.2011, 09:15
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

Код:
CREATE TABLE IF NOT EXISTS `users` (
  `idu` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  PRIMARY KEY (`idu`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- Дамп данных таблицы `users`
--

INSERT INTO `users` (`idu`, `name`) VALUES (1, 'a'),(2, 'b'),(3, 'c'),(4, 'd'),(5, 'f'),(6, 'g'),(7, 'k');

CREATE TABLE IF NOT EXISTS `banned` (
  `idu` int(11) NOT NULL,
  `idb` int(11) NOT NULL,
  PRIMARY KEY (`idu`,`idb`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Дамп данных таблицы `banned`
--

INSERT INTO `banned` (`idu`, `idb`) VALUES (2, 3),(3, 4),(3, 5),(4, 2);

-- Запрос

SELECT u.idu
FROM users u
WHERE u.idu != $idu
AND u.idu NOT IN
  (
    SELECT IF(b.idu = $idu, b.idb, b.idu)
    FROM banned b
    WHERE b.idu = $idu OR b.idb = $idu
  )
ORDER BY RAND()
LIMIT 1

Последний раз редактировалось micscr, 31.01.2011 в 14:04.
Ответить с цитированием