Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
UPDATE
phplist_user_user
SET
email = (
SELECT
Email
FROM
User, phplist_usersubscribers
WHERE
phplist_usersubscribers.userid = User.Id
AND
phplist_usersubscribers.subscribersid = phplist_user_user.id
AND
NOT (Email IS NULL)
LIMIT 1
)
WHERE
NOT (
(SELECT
id
FROM
phplist_usersubscribers
WHERE
phplist_usersubscribers.subscribersid = phplist_user_user.id
LIMIT 1
) IS NULL
)
Вот на такой код наткнулся в корпоративном фреймворке. Стоит ли говорить, что весь запрос был написан в одну строку.
Ну допустим условие в выборке заменим на exists, не думаю что мы выиграем в скорости , но в читаемости всяко.
А как тогда в данном случае сделать update поля email без подзапроса.
Просто я реально не знаю, если вы подскажите , то буду благодарен.
Да, здесь фактически выполняется синхронизация - перенос имейлов из одной таблицы в другую.
Там выше говорили по поводу оптимизации. Если интересно. Я переписал этот запрос так:
UPDATE
phplist_user_user puu
JOIN
phplist_usersubscribers pu ON puu.id = pu.subscribersid
JOIN
User u ON pu.userid = u.Id
SET
puu.email = u.Email
WHERE
u.Email IS NOT NULL
AND pu.subscribersid = puu.id
AND pu.id IS NOT NULL;
нет, это не показатель дерьмовости архитектуры. Я чуть ниже привел код "отрефактореного" запроса. И он выполняется вполне нормально.
Это показатель того что:
во-первых, люди не знают конструкцию IS NOT NULL и заменяют ее NOT ( (выражение) IS NULL)
во-вторых, не понимают природы подрапросов и лепят их везде. Что в случае с мускулом до сих пор является преступлением.
вообще в этому запросу видна дерьмовость архитектуры базы
А как тогда в данном случае сделать update поля email без подзапроса.
Просто я реально не знаю, если вы подскажите , то буду благодарен.
а что пытался сделать автор? перенести емейл из базы в базу?
Там выше говорили по поводу оптимизации. Если интересно. Я переписал этот запрос так:
UPDATE
phplist_user_user puu
JOIN
phplist_usersubscribers pu ON puu.id = pu.subscribersid
JOIN
User u ON pu.userid = u.Id
SET
puu.email = u.Email
WHERE
u.Email IS NOT NULL
AND pu.subscribersid = puu.id
AND pu.id IS NOT NULL;
Это показатель того что:
во-первых, люди не знают конструкцию IS NOT NULL и заменяют ее NOT ( (выражение) IS NULL)
во-вторых, не понимают природы подрапросов и лепят их везде. Что в случае с мускулом до сих пор является преступлением.
Или батхёрт (болезнь, сам нагуглишь)?
это сереженька мишустик мимо гугла промахнулся когда видео своей мамаши искал
хмм, корпорация не Pfizer случайно? 🙂
я как бы намекал на то, что если там mysql и, хуже того, php...