Есть таблица, поля:
id - 1 key - 100
id - 4 key - 100
id - 9 key - 100
Зашли на страницу 4, нужно вывести остальные id ( в нашем случаи 1,9 ) где поле key=100, как это реализовать одним запросом???
AllesKlar
3.09.2015 - 23:54
SELECT * FROM `table` WHERE `id` != 4 AND `key` = 100
_____________
[продано копирайтерам]
Цитата (AllesKlar @ 3.09.2015 - 23:54) |
SELECT * FROM `table` WHERE `id` != 4 AND `key` = 100 |
Так я же не знаю значение поля key???
Ваш вариант таков, 1-й запрос: узнали значение поля key по id, 2-й запрос: написан вами! Я же хочу это реализовать одним запросом?
AllesKlar
4.09.2015 - 00:33
Цитата (amf1k @ 3.09.2015 - 22:26) |
Цитата (AllesKlar @ 3.09.2015 - 23:54) | SELECT * FROM `table` WHERE `id` != 4 AND `key` = 100 |
Так я же не знаю значение поля key??? Ваш вариант таков, 1-й запрос: узнали значение поля key по id, 2-й запрос: написан вами! Я же хочу это реализовать одним запросом?
|
Телепатов нету.
SELECT * FROM `table` WHERE `id` != 4 AND `key` = (SELECT `key` FROM `table` WHERE `id` = 4)
_____________
[продано копирайтерам]
Цитата (AllesKlar @ 4.09.2015 - 00:33) |
Цитата (amf1k @ 3.09.2015 - 22:26) | Цитата (AllesKlar @ 3.09.2015 - 23:54) | <pre class="sh_sourceCode" rel="sql"><span class="sh_keyword">SELECT</span> <span class="sh_symbol">*</span> <span class="sh_keyword">FROM</span> <span class="sh_att">`table`</span> <span class="sh_keyword">WHERE</span> <span class="sh_att">`id`</span> <span class="sh_symbol">!=</span> <span class="sh_number">4</span> <span class="sh_keyword">AND</span> <span class="sh_att">`key`</span> <span class="sh_symbol">=</span> <span class="sh_number">100</span></pre> |
Так я же не знаю значение поля key??? Ваш вариант таков, 1-й запрос: узнали значение поля key по id, 2-й запрос: написан вами! Я же хочу это реализовать одним запросом?
|
Телепатов нету. SELECT * FROM `table` WHERE `id` != 4 AND `key` = (SELECT `key` FROM `table` WHERE `id` = 4) |
Это рекурсивный запрос, MySQL - это поддерживает??
Вот еще намутил:
SELECT `t1`.`id` FROM `table` `t1`
INNER JOIN `table` `t2` ON (`t1`.`key` = `t2`.`key` AND `t1`.`id` <> 4)
WHERE `t2`.`id` = 4
AllesKlar
4.09.2015 - 01:46
Цитата (amf1k @ 3.09.2015 - 23:12) |
Это рекурсивный запрос, MySQL - это поддерживает?? |
В чем рекурсия? Обычный запрос с подзапросом.
Сначала выполняется подзапрос, потом его результат передается в основной запрос.
И только после этого выполняется основной запрос.
А то, что намутил - это реально намутил.
Неоправданная трата памяти.
_____________
[продано копирайтерам]
Доброжелатель
22.09.2015 - 12:23
Цитата |
Вот еще намутил: SELECT `t1`.`id` FROM `table` `t1` INNER JOIN `table` `t2` ON (`t1`.`key` = `t2`.`key` AND `t1`.`id` <> 4) WHERE `t2`.`id` = 4 |
Доброжелатель
22.09.2015 - 12:28
Цитата |
А то, что намутил - это реально намутил. Неоправданная трата памяти. |
Сомневаюсь что на данный запрос уйдет намного больше памяти чем на
SELECT * FROM `table` WHERE `id` != 4 AND `key` = (SELECT `key` FROM `table` WHERE `id` = 4)
Цитата (AllesKlar @ 3.09.2015 - 21:46) |
Сначала выполняется подзапрос, потом его результат передается в основной запрос. И только после этого выполняется основной запрос. |
На самом деле не совсем так. Подзапрос будет выполняться на каждую строчку таблицы. По крайней мере так было, может сейчас чего исправили.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (twin @ 22.09.2015 - 13:30) |
На самом деле не совсем так. Подзапрос будет выполняться на каждую строчку таблицы. По крайней мере так было, может сейчас чего исправили. |
Ни чего не исправили, все верно, запрос в условии зло, т.к. под запрос будет выполняться столько раз сколько строк в основном запросе.
Valick
22.09.2015 - 15:04
twin, TMake, есть такая штука как внутренний оптимизатор, на самом деле нельзя быть 100% уверенным, что СУРБД выполняет именно ваш запрос. Другое дело что результат она вам вернёт 100% соответсвующий вашему запросу.
Цитата (TMake @ 22.09.2015 - 13:17) |
под запрос будет выполняться столько раз сколько строк в основном запросе |
у меня на самом деле несколько иная информация, но спорить в данном случае не буду
_____________
Стимулятор ~yoomoney - 41001303250491
Цитата (Valick @ 22.09.2015 - 11:04) |
у меня на самом деле несколько иная информация, но спорить в данном случае не буду |
Зачем спорить... Просто поделись информацией. Я вот не совсем уверен в свой правоте. Однако по старой памяти старась избегать вложенных запросов. Может зря.
Оптимизатор - великая штука. Могу допустим предположить, что внутренний запрос может закэшироваться. Однако это только предположение, не более. Если есть достоверная инфа, расскажи.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Valick
22.09.2015 - 17:21
twin, да это книжки перелистывать надо, мне сейчас некогда.
_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.