nastya97core
@nastya97core
Начинающий программист

Можно ли в запросе получить сразу 2 записи, по параметру, который известен в 1?

Здравствуйте. Вопрос в заголовке очень сумбурный, но там не так всё сложно.
Можно ли в один запрос уместить такую конструкцию:
мне нужно получить запись с id 127 и предыдущую запись, где mytarget равен тому, что находится в 127. По сути можно сделать два запроса:
SELECT result, mytarget FROM mydata WHERE id = '127' ORDER BY id DESC LIMIT 1
SELECT result FROM mydata WHERE id < '127' AND mytarget=$db['mytarget'] ORDER BY id DESC LIMIT 1

Но вот хотела уточнить, не будет ли быстрее выполняться один запрос? И вообще возможно ли это?
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
BorLaze
@BorLaze
Java developer
Именно две или первая нужна постольку поскольку нужно поле mytarget из нее?

Если важен только последний запрос, можно сделать так
SELECT result 
FROM mydata 
WHERE id < '127' AND mytarget = (SELECT mytarget FROM mydata WHERE id = '127')
ORDER BY id DESC 
LIMIT 1


Если же нужны именно обе строки, тогда UNION
SELECT result, mytarget 
FROM mydata 
WHERE id = '127'

UNION 

SELECT result, mytarget 
FROM mydata 
WHERE id < '127' AND mytarget = (SELECT mytarget FROM mydata WHERE id = '127')
ORDER BY id DESC 
LIMIT 1


Насчет быстрее, сказать трудно; но обычно два запроса выполняются дольше одного, пусть и сложного.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
С учетом прослойки в виде какого-то серверного языка, коннекта и передачи параметров запроса - один запрос будет быстрее, не сильно, но да, быстрее.
SELECT * 
FROM mydata 
WHERE id < '127' 
AND mytarget = (
   SELECT mytarget 
   FROM mydata 
   WHERE id = '127' 
   ORDER BY id DESC 
   LIMIT 1
) 
ORDER BY id DESC 
LIMIT 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы