@comalex3

UPDATE + JOIN + ORDER BY в одном запросе?

Есть таблица dsl_checkins и area_distance. В area_distance 3 поля :

distance
area1
area2


Для примера:

distance = 3456
area1 = phoenix
area2 = houston


Мне нужно получить с dsl_checkins запись где distance самая маленькая и нужно заботиться о usage_flag поле(дабы небыли гонок). Думал сделать красиво одним запросом:

UPDATE dsl_checkins DC
    join area_distance AD
    on AD.area2 = DC.area
set DC.usage_flag=1,
    DC.id = (SELECT @dsl_id := DC.id)
WHERE DC.active = 1 AND
      DC.offline = 0 AND
      usage_flag = 0 AND
      AD.area1 = 'houston'
ORDER BY AD.distance ASC, RAND()
limit 1;


Но получаю ошибку

Error Code: 1221. Incorrect usage of UPDATE and ORDER BY


На стековерфлов дали ссылку на документацию что так делать нельзя, и дают
ссылку.

Но вот как это:
UPDATE Ratemaster
SET Ratemaster.Rate =
(
    SELECT Rates.Rate
    FROM Rates
    WHERE Ratemaster.user = Rates.user
    ORDER BY Rates.id
    LIMIT 1
)


применить к моему запросу не понимаю.

Есть идеи?
ПС: чувствую что не правильно все делаю но нет идей. Спасибо.
  • Вопрос задан
  • 415 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fqyeh29
@Fqyeh29
↓ ИМХО ↓
Я что то эту строчку не пойму. Вы сортируете или рандомите?
ORDER BY AD.distance ASC, RAND()
Ответ написан
Ваш ответ на вопрос

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

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