[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: помогите с запросом
amf1k
Есть таблица, поля:
id - 1 key - 100
id - 4 key - 100
id - 9 key - 100
Зашли на страницу 4, нужно вывести остальные id ( в нашем случаи 1,9 ) где поле key=100, как это реализовать одним запросом???
AllesKlar
SELECT  * FROM `table` WHERE `id` != 4 AND `key` = 100


_____________
[продано копирайтерам]
amf1k
Цитата (AllesKlar @ 3.09.2015 - 23:54)
SELECT  * FROM `table` WHERE `id` != 4 AND `key` = 100

Так я же не знаю значение поля key???
Ваш вариант таков, 1-й запрос: узнали значение поля key по id, 2-й запрос: написан вами! Я же хочу это реализовать одним запросом?
AllesKlar
Цитата (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)


_____________
[продано копирайтерам]
amf1k
спасибо, буду пробывать)
amf1k
Цитата (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 - это поддерживает??
amf1k
Вот еще намутил:
SELECT `t1`.`id` FROM `table` `t1`
INNER JOIN `table` `t2` ON (`t1`.`key` = `t2`.`key` AND `t1`.`id` <> 4)
WHERE `t2`.`id` = 4
AllesKlar
Цитата (amf1k @ 3.09.2015 - 23:12)
Это рекурсивный запрос, MySQL - это поддерживает??

В чем рекурсия? Обычный запрос с подзапросом.
Сначала выполняется подзапрос, потом его результат передается в основной запрос.
И только после этого выполняется основной запрос.

А то, что намутил - это реально намутил.
Неоправданная трата памяти.

_____________
[продано копирайтерам]
Доброжелатель
Цитата
Вот еще намутил:
SELECT `t1`.`id` FROM `table` `t1`
INNER JOIN `table` `t2` ON (`t1`.`key` = `t2`.`key` AND `t1`.`id` <> 4)
WHERE `t2`.`id` = 4


Не хорошо чужие решения выдавать за свои:

http://forum.php.su/topic.php?forum=71&topic=17271
Доброжелатель
Цитата
А то, что намутил - это реально намутил.
Неоправданная трата памяти.



Сомневаюсь что на данный запрос уйдет намного больше памяти чем на

SELECT  * FROM `table` WHERE `id` != 4 AND `key` = (SELECT `key` FROM `table` WHERE `id` = 4)
twin
Цитата (AllesKlar @ 3.09.2015 - 21:46)
Сначала выполняется подзапрос, потом его результат передается в основной запрос.
И только после этого выполняется основной запрос.

На самом деле не совсем так. Подзапрос будет выполняться на каждую строчку таблицы. По крайней мере так было, может сейчас чего исправили.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
TMake
Цитата (twin @ 22.09.2015 - 13:30)
На самом деле не совсем так. Подзапрос будет выполняться на каждую строчку таблицы. По крайней мере так было, может сейчас чего исправили.

Ни чего не исправили, все верно, запрос в условии зло, т.к. под запрос будет выполняться столько раз сколько строк в основном запросе.
Valick
twin, TMake, есть такая штука как внутренний оптимизатор, на самом деле нельзя быть 100% уверенным, что СУРБД выполняет именно ваш запрос. Другое дело что результат она вам вернёт 100% соответсвующий вашему запросу.
Цитата (TMake @ 22.09.2015 - 13:17)
под запрос будет выполняться столько раз сколько строк в основном запросе

у меня на самом деле несколько иная информация, но спорить в данном случае не буду


_____________
Стимулятор ~yoomoney - 41001303250491
twin
Цитата (Valick @ 22.09.2015 - 11:04)
у меня на самом деле несколько иная информация, но спорить в данном случае не буду

Зачем спорить... Просто поделись информацией. Я вот не совсем уверен в свой правоте. Однако по старой памяти старась избегать вложенных запросов. Может зря.
Оптимизатор - великая штука. Могу допустим предположить, что внутренний запрос может закэшироваться. Однако это только предположение, не более. Если есть достоверная инфа, расскажи.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Valick
twin, да это книжки перелистывать надо, мне сейчас некогда.


_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.