Есть таблица, поля: id - 1 key - 100 id - 4 key - 100 id - 9 key - 100 Зашли на страницу 4, нужно вывести остальные id ( в нашем случаи 1,9 ) где поле key=100, как это реализовать одним запросом???
если ты при заходе на страницу 4 не знаешь key т.е. только после его получения ты начинаешь получение всех записей с key=100 тогда нет.
беда( тогда буду печатать 2 запроса( Добавлено спустя 8 минут 23 секунды: А если так замутить??? SELECT * FROM `table` WHERE `id` != 4 AND `key` = (SELECT `key` FROM `table` WHERE `id` = 4)
такая хрень называется рекурсивный запрос (по аналогу рекурсии в программировании) MySQL его не поддерживает, другие БД - да, если мне не изменяет память - MS SQL. Добавлено спустя 18 минут 49 секунд: в свое время я выяснял подобное, нельзя, хотя это решало бы много проблем.
Вот еще намутил: SELECT `t1`.`id` FROM `table` `t1` INNER JOIN `table` `t2` ON (`t1`.`key` = `t2`.`key` AND `t1`.`id` <> 4) WHERE `t2`.`id` = 4
т.к. id уникален, ваш подзапрос вернет одну строку. значит можно указать = вместо без IN() Код (Text): SELECT `id` FROM `mytable` WHERE `key` = (SELECT `key` FROM `mytable` WHERE `id` = 4) или Код (Text): SELECT y.`id` FROM `mytable` AS x, `mytable` AS y WHERE x.`id` = 4 AND y.`key` = x.`key` или Код (Text): SELECT y.`id` FROM `mytable` AS x JOIN `mytable` AS y ON y.`key`=x.`key` WHERE x.`id` = 4 лично мне последний вариант больше нравится.