Я программирую любимую функцию.

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

На данный момент я получил 2 запроса, чтобы сделать эту работу:

UPDATE userdata
SET maindata = 0
WHERE 
cid = :id;

UPDATE userdata
SET maindata = 1
WHERE 
cid = :id AND id = :id2
LIMIT 1

В первом запросе я делаю все адреса как "нет избранных", а во втором я делаю новый выбранный адрес любимым.

Есть ли способ улучшить этот запрос или переписать оба в 1? Или даже лучшее решение?

1
delato468 17 Апр 2019 в 17:14

2 ответа

Лучший ответ

Если вы хотите один запрос, вы можете использовать случай, когда (или если)

update  userdata 
set maindate = case when id = :id2 then 1 
                else 0 end 
where  cid = :id;

Для производительности Убедитесь, что у вас есть правильный индекс для столбцов пользовательских данных (cid, id)

И число отсканированных строк должно быть одинаковым для первого вейрия .. но таким образом вы избегаете второго ..

В конце концов попробуйте создать составной индекс

 create index myidx1 on userdata(cid, id)
2
scaisEdge 17 Апр 2019 в 15:06
UPDATE userdata SET maindata = (case when cid = id AND id = id2 then 1 else 0 end);

Это поможет. Я не уверен в вашем запросе, но это поможет. дайте мне знать, если вы ищете что-то другое ...

1
rkoots 17 Апр 2019 в 14:25