1. SQL / Говнокод #5045

    −188

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    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
    			)

    Вот на такой код наткнулся в корпоративном фреймворке. Стоит ли говорить, что весь запрос был написан в одну строку.

    Запостил: maghamed, 24 Декабря 2010

    Комментарии (29) RSS

    • Сейчас скажут, что это сделал компренда...
      Ответить
    • А что вам конкретно не нравиться в этом запросе, а то я с ходу так понять не могу
      Ответить
      • а Вам нравица 2 подзапроса? или Вам нравица что вместо EXISTS делается выборка с лимитом?

        вообще в этому запросу видна дерьмовость архитектуры базы
        Ответить
        • Ну допустим условие в выборке заменим на 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;
              Ответить
              • Ага спасибо за пояснение, я даже как то и не знал что в update можно использовать join, буду знать , век живи век учись
                Ответить
          • я чуть ниже отписал как это сделать через джоин - если вам интересно.
            Ответить
        • нет, это не показатель дерьмовости архитектуры. Я чуть ниже привел код "отрефактореного" запроса. И он выполняется вполне нормально.

          Это показатель того что:
          во-первых, люди не знают конструкцию IS NOT NULL и заменяют ее NOT ( (выражение) IS NULL)
          во-вторых, не понимают природы подрапросов и лепят их везде. Что в случае с мускулом до сих пор является преступлением.
          Ответить
    • парочка таких запросов и у руководства встает вопрос, что надо подкупить еще серваков помощнее
      Ответить
      • Ну хоть ты тогда скажи как правильно это сделать на голимом sql
        Ответить
        • показать все, что скрытоСИСЬКИ ДРОЧИТЬ ФОТО ПИЗДА КОНЧА СЫН ТРАХАЕТ МАТЬ СОСЁТ У КОНЯ ПЕРВАЯ БРАЧНАЯ НОЧЬ ЕЛЕНЫ БЕРКОВОЙ ГОЛАЯ ВЕРА БРЕЖНЕВА АНАЛЬНЫЙ СЕКС ХУЙ В ЖОПЕ
          Ответить
      • показать все, что скрытоСИСЬКИ ДРОЧИТЬ ФОТО ПИЗДА КОНЧА СЫН ТРАХАЕТ МАТЬ СОСЁТ У КОНЯ ПЕРВАЯ БРАЧНАЯ НОЧЬ ЕЛЕНЫ БЕРКОВОЙ ГОЛАЯ ВЕРА БРЕЖНЕВА АНАЛЬНЫЙ СЕКС ХУЙ В ЖОПЕ
        Ответить
        • У тебя шизофазия (болезнь, поток несвязанных слов)?
          Или батхёрт (болезнь, сам нагуглишь)?
          Ответить
          • копролалия же!
            Ответить
            • Просто в диалогах, данный набор слов ему никак не удавалось вставить... Вот и отрывается...
              Ответить
              • У коня первая брачная ночь. Надо полагать, с ним.
                Ответить
    • показать все, что скрытоСИСЬКИ ДРОЧИТЬ ФОТО ПИЗДА КОНЧА СЫН ТРАХАЕТ МАТЬ СОСЁТ У КОНЯ ПЕРВАЯ БРАЧНАЯ НОЧЬ ЕЛЕНЫ БЕРКОВОЙ ГОЛАЯ ВЕРА БРЕЖНЕВА АНАЛЬНЫЙ СЕКС ХУЙ В ЖОПЕ
      Ответить
    • видать чей то аккаунт увели
      Ответить
    • в копропротивном нашлось "limit" и "phplist_user_user"?
      Ответить
      • http://www.phplist.com/ ?
        Ответить
        • "email campaign manager"
          хмм, корпорация не Pfizer случайно? :-)

          я как бы намекал на то, что если там mysql и, хуже того, php...
          Ответить

    Добавить комментарий