|
|
|
UPDATE + JOIN + ORDER BY в одном запросе
|
|||
|---|---|---|---|
|
#18+
Продолжение темы Есть таблица dsl_checkins и area_distance . В area_distance 3 поля : Код: sql 1. 2. 3. Для примера: Код: sql 1. 2. 3. Мне нужно получить с dsl_checkins запись где distance самая маленькая и нужно заботиться о usage_flag поле(дабы небыли гонок). Думал сделать красиво одним запросом: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Но получаю ошибку Код: plaintext На стековерфлов дали ссылку на документацию что так делать нельзя, и дают ссылку . Но вот как это: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. применить к моему запросу не понимаю. Есть идеи? ПС: чувствую что не правильно все делаю но нет идей. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2016, 23:40 |
|
||
|
UPDATE + JOIN + ORDER BY в одном запросе
|
|||
|---|---|---|---|
|
#18+
как оно у вас вообще работает, не пойму... есть ДЦ, она связана с АД только по ареа-коду, так? а если там и тут по две записи с одной ареей, то джойн выдаст четыре пары, верно? и тогда вот этот запрос - он какую запись из ДЦ должен проапдейтить - ведь запись с минимальной дистанцией в АД будет относиться сразу к обеим записям из ДЦ?.. может, в условии связи ещё что-то есть/должно быть? или задача так и стоит - "найти и проапдейтить одну случайную запись, относящуюся к минимальной дистанции?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 07:46 |
|
||
|
UPDATE + JOIN + ORDER BY в одном запросе
|
|||
|---|---|---|---|
|
#18+
comalex3, вы что хотите апдейтить в dsl_checkins только DC.usage_flag=1 ??? чем и при каких условиях а вот это что DC.id = (SELECT @dsl_id := DC.id) нормально объясните ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 09:06 |
|
||
|
UPDATE + JOIN + ORDER BY в одном запросе
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinov, Зачем нужно: Код: sql 1. Сделали update : для таблицы dsl_checkins с id @dsl_id поставили usage_flag = 1(пока я не освобожу это поле никто не сможет использовать его). Дальше в скрипте получаем информацию про запись с таблицы dsl_checkins где id равно @dsl_id Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 11:13 |
|
||
|
UPDATE + JOIN + ORDER BY в одном запросе
|
|||
|---|---|---|---|
|
#18+
tanglir, - "найти и проапдейтить одну случайную запись, относящуюся к минимальной дистанции?" Так и есть. area_distance Код: sql 1. 2. 3. 4. 5. dsl_checkins Код: sql 1. 2. 3. 4. 5. 6. 7. Нужно получить одну запись dsl_checkins, но отсортировать ее по дистанции с area_distance где dsl_checkins.area2 = area_distance.area. Получаеться в dsl_checkins может быть не одно запись соответствующая критериям для это мы делаем Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 11:47 |
|
||
|
UPDATE + JOIN + ORDER BY в одном запросе
|
|||
|---|---|---|---|
|
#18+
comalex3, 1. найти id случайной записи (SELECT .... ORDER BY AD.distance ASC, RAND() limit 1) 2. UPDATE .... WHERE id= (id случайной записи) как бы ни было громоздко, должно работать это и есть решение упомянутое выше UPDATE Ratemaster SET Ratemaster.Rate = ( SELECT Rates.Rate FROM Rates WHERE Ratemaster.user = Rates.user ORDER BY Rates.id LIMIT 1 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 09:20 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39267105&tid=1831601]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
234ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 519ms |

| 0 / 0 |
