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

    −176

    1. 1
    SELECT DISTINCT(sid) FROM

    sid - уникальное значение(PK)

    ferry-very-good, 13 Сентября 2010

    Комментарии (15)
  2. SQL / Говнокод #4216

    −118

    1. 1
    Order by SYSDATE - NVL(p_date, created)

    Сортировка по дате в обратном порядке

    korvald, 10 Сентября 2010

    Комментарии (2)
  3. SQL / Говнокод #4205

    −128

    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
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    CREATE TABLE IF NOT EXISTS `ls_user` (
      `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `user_login` varchar(30) NOT NULL,
      `user_password` varchar(50) NOT NULL,
      `user_mail` varchar(50) NOT NULL,
      `user_skill` float(9,3) unsigned NOT NULL DEFAULT '0.000',
      `user_date_register` datetime NOT NULL,
      `user_date_activate` datetime DEFAULT NULL,
      `user_date_comment_last` datetime DEFAULT NULL,
      `user_ip_register` varchar(20) NOT NULL,
      `user_rating` float(9,3) NOT NULL DEFAULT '0.000',
      `user_count_vote` int(11) unsigned NOT NULL DEFAULT '0',
      `user_activate` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `user_activate_key` varchar(32) DEFAULT NULL,
      `user_profile_name` varchar(50) DEFAULT NULL,
      `user_profile_sex` enum('man','woman','other') NOT NULL DEFAULT 'other',
      `user_profile_country` varchar(30) DEFAULT NULL,
      `user_profile_region` varchar(30) DEFAULT NULL,
      `user_profile_city` varchar(30) DEFAULT NULL,
      `user_profile_birthday` datetime DEFAULT NULL,
      `user_profile_site` varchar(200) DEFAULT NULL,
      `user_profile_site_name` varchar(50) DEFAULT NULL,
      `user_profile_icq` bigint(20) unsigned DEFAULT NULL,
      `user_profile_about` text,
      `user_profile_date` datetime DEFAULT NULL,
      `user_profile_avatar` varchar(250) DEFAULT NULL,
      `user_profile_foto` varchar(250) DEFAULT NULL,
      `user_settings_notice_new_topic` tinyint(1) NOT NULL DEFAULT '1',
      `user_settings_notice_new_comment` tinyint(1) NOT NULL DEFAULT '1',
      `user_settings_notice_new_talk` tinyint(1) NOT NULL DEFAULT '1',
      `user_settings_notice_reply_comment` tinyint(1) NOT NULL DEFAULT '1',
      `user_settings_notice_new_friend` tinyint(1) NOT NULL DEFAULT '1',
      PRIMARY KEY (`user_id`),
      UNIQUE KEY `user_login` (`user_login`),
      UNIQUE KEY `user_mail` (`user_mail`),
      KEY `user_activate_key` (`user_activate_key`),
      KEY `user_activate` (`user_activate`),
      KEY `user_rating` (`user_rating`),
      KEY `user_profile_sex` (`user_profile_sex`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    [/code]
    очень актуально смотрится эта таблица с приведённой выше. очень умно сделать таблицу "топик-стартер" и не выделить отдельно профиль пользователя. что чаще используется в выборке? =)
    про миллионы пользователей и лайвстрит - не смешите, не верю (с)
    загнётся до прихода в БД

    дополнение к http://govnokod.ru/4203
    выделил отдельным гауно-кодом из-за того, что комично смотрится вместе с указанной выше таблицей. ну и ограничение длины комментов есть. ярые искатели оптимизаций видимо идут мимо. очень актуально смотрится эта таблица с приведённой выше. очень умно сделать таблицу админов в один колумн и не выделить отдельно профиль пользователя. что чаще используется в выборке? =)

    hybroid, 09 Сентября 2010

    Комментарии (18)
  4. SQL / Говнокод #4203

    −125

    1. 1
    2. 2
    3. 3
    4. 4
    CREATE TABLE IF NOT EXISTS `ls_user_administrator` (
      `user_id` int(11) unsigned NOT NULL,
      UNIQUE KEY `user_id` (`user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    Видимо сделать столбец 'administrator' в таблице `ls_user` и ставить в него 1 или 0 - это слишком просто.. Или тут скрыта какая-то оптимизация?
    Дамп спёрт из LiveStreet.

    hybroid, 08 Сентября 2010

    Комментарии (26)
  5. SQL / Говнокод #4200

    −863

    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
    if (($pol) and ($brand)) {
        $result = mysql_query("SELECT * FROM inetmag WHERE pol = '$pol' AND brand = '$brand'");
    }
    ;
    if ((!$pol) and ($brand)) {
        $result = mysql_query("SELECT * FROM inetmag WHERE brand = '$brand'");
    }
    ;
    if (($pol) and (!$brand)) {
        $result = mysql_query("SELECT * FROM inetmag WHERE pol = '$pol'");
    }
    ;
    if ((!$pol) and (!$brand)) {
        $result = mysql_query("SELECT * FROM inetmag");
    }
    ;

    мой учитель сильно негодовал, и предложил вот это:
    $url = <<< TEXT
    SELECT *
    FROM inetmag
    WHERE
    pol = IF(LENGTH('$pol')<>0,('$pol'),pol)
    AND
    brand = IF(LENGTH ('$brand')<>0,('$brand'),brand)
    TEXT;
    $result = mysql_query($url);

    truedizzy, 08 Сентября 2010

    Комментарии (8)
  6. SQL / Говнокод #4177

    −865

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    FUNCTION f_decncity_arr_find_base(p_gds_id IN NUMBER, p_date IN DATE DEFAULT SYSDATE) RETURN VARCHAR2 IS
        v_denc15 NUMBER; v_k0 NUMBER; v_k1 NUMBER;
    BEGIN
        decncity_arr_find_base(p_gds_id, p_date, v_denc15, v_k0, v_k1);
        RETURN 'DENC15!=@'||TO_CHAR(v_denc15)||'@ K0!=@'||TO_CHAR(v_k0)||'@ K1!=@'||TO_CHAR(v_k1)||'@';
    END;

    Так и не поняли, что это....

    markbrutt, 06 Сентября 2010

    Комментарии (3)
  7. SQL / Говнокод #4147

    −856

    1. 1
    SELECT i.*, p.link as p_link, p.title as p_title, p.p_id FROM `items` i, `places` p WHERE i.public='1' and i.place=p.id and  (i.place='1' or i.place='1972' or i.place='2' or i.place='3' or i.place='4' or i.place='5' or i.place='6' or i.place='7' or i.place='8' or i.place='9' or i.place='10' or i.place='11' or i.place='12' or i.place='13' or i.place='14' or i.place='15' or i.place='16' or i.place='17' or i.place='18' or i.place='19' or i.place='20' or i.place='21' or i.place='22' or i.place='23' or i.place='24' or i.place='25' or i.place='26' or i.place='27' or i.place='28' or i.place='29' or i.place='30' or i.place='31' or i.place='32' or i.place='33' or i.place='34' or i.place='35' or i.place='36' or i.place='37' or i.place='38' or i.place='39' or i.place='40' or i.place='41' or i.place='42' or i.place='43' or i.place='44' or i.place='45' or i.place='46' or i.place='47' or i.place='48' or i.place='49' or i.place='50' or i.place='51' or i.place='52' or i.place='53' or i.place='54' or i.place='55' or i.place='56' or i.place='57' or i.place='58' or i.place='59' or i.place='60' or i.place='61' or i.place='62' or i.place='63' or i.place='64' or i.place='65' or i.place='66' or i.place='67' or i.place='68' or i.place='69' or i.place='70' or i.place='71' or i.place='72' or i.place='73' or i.place='74' or i.place='75' or i.place='76' or i.place='77' or i.place='78' or i.place='79' or i.place='80' or i.place='81' or i.place='82' or i.place='83' or i.place='84' or i.place='85' or i.place='86' or i.place='87' or i.place='88' or i.place='89' or i.place='90' or i.place='91' or i.place='92' or i.place='93' or i.place='94' or i.place='95' or i.place='96' or i.place='97' or i.place='98' or i.place='99' or i.place='100' or i.place='101' or i.place='102' or i.place='103' or i.place='104' or i.place='105' or i.place='106' or i.place='107' or i.place='108' or i.place='109' or i.place='110' or i.place='111' or i.place='112' or i.place='113' or i.place='114' or i.place='115' or i.place='116' or i.place='117' or i.place='118' or i.place='119' or i.place='120' or i.place='121' or i.place='122' or i.place='123' or i.place='124' or i.place='125' or i.place='126' or i.place='127' or i.place='128' or i.place='129' or i.place='130' or i.place='131' or i.place='132' or i.place='133' or i.place='134' or i.place='135' or i.place='136' or i.place='137' or i.place='138' or i.place='139' or i.place='140' or i.place='141' or i.place='142' or i.place='143' or i.place='144' or i.place='145' or i.place='146' or i.place='147' or i.place='148' or i.place='149' or i.place='150' or i.place='151' or i.place='152' or i.place='153' or i.place='154' or i.place='155' or i.place='156' or i.place='157' or i.place='158' or i.place='159' or i.place='160' or i.place='161' or i.place='162' or i.place='163' or i.place='164' or i.place='165' or i.place='166')  ORDER BY i.lastupdated DESC LIMIT 18160, 10;

    есть ещё примерно такой же, но с JOINами

    wiz, 01 Сентября 2010

    Комментарии (10)
  8. SQL / Говнокод #4140

    −854

    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
    procedure dynamic_open(p_sql VARCHAR2, p_params t_string_table, p_cur OUT SYS_REFCURSOR) is
      begin
        case p_params.count
          when 0 then open p_cur for p_sql;
          when 1 then open p_cur for p_sql using p_params(1);
          when 2 then open p_cur for p_sql using p_params(1),
                                                 p_params(2);
          when 3 then open p_cur for p_sql using p_params(1),
                                                 p_params(2),
                                                 p_params(3);
          when 4 then open p_cur for p_sql using p_params(1),
                                                 p_params(2),
                                                 p_params(3),
                                                 p_params(4);
    /* ... */
          when 100 then open p_cur for p_sql using p_params(1),
                                                 p_params(2),
                                                 p_params(3),
                                                 p_params(4),
    /* ... */
                                                 p_params(100);
        end case;
      end dynamic_open;

    Динамический SQL - такой динамический. Уложились всего-то в 5050 строк.

    wecanstoptrain, 31 Августа 2010

    Комментарии (12)
  9. SQL / Говнокод #4021

    −866

    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
    ALTER PROCEDURE [dbo].[spSearch]                  
    	@Name nvarchar(256)
    AS                  
    BEGIN                  
     SET NOCOUNT ON                  
                       
    	DECLARE @qry VARCHAR(MAX)
    	DECLARE @Where VARCHAR(1000)                                
    	              
    	SET @Where = '1=1'                  
            
    	IF ISNULL(@Name,'') <> ''                  
    	BEGIN                  
    		SET @Where = @Where + ' and a.Name = ''' + @Name + ''''                  
    	END      
    
    SET @Where = @Where + ' and a.Active = 1'     
          
    	SET @qry ='    
    select a.* from t_Table1 a   
    	WHERE ' + @Where     + 
     ' order by a.Name'
    
    	EXECUTE (@qry)                  
                       
    END

    zheka, 18 Августа 2010

    Комментарии (5)
  10. SQL / Говнокод #3939

    −865

    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
    (
             (                      
                    ((
                            SELECT a.* FROM collections a
                            LEFT JOIN link_xml_collections lxa ON
    lxa.collection_id = a.id
                            WHERE lxa.xml_id IS NULL
                    ) UNION (
                            SELECT a.* FROM collections a
                            WHERE get_action_of_collection_last_xml(a.id, a.modified) = 3
                    )) INTERSECT (
                            SELECT a.* FROM collections a
                            LEFT JOIN link_collection_compositions AS lcc ON lcc.collection_id = a.id
                            LEFT JOIN compositions AS c ON c.id = lcc.composition_id
                            WHERE c.status = 0
                    )
           ) INTERSECT (
                    SELECT a.* FROM public.collections AS a
                    LEFT JOIN link_collection_compositions AS lcc ON lcc.collection_id = a.id
                    LEFT JOIN compositions AS c ON c.id = lcc.composition_id  WHERE c.owner_id = 6 AND a.modified >= '2010-08-10 00:00:00'
            )
    ) EXCEPT (
            SELECT a.* FROM collections a WHERE a.title_ua ILIKE 'TEST%'
    )

    Попросили пофиксить багу в функции, которая в зависимости от передаваемых параметров формировала sql запрос и возвращала данные. (Человек коротый это писал уволился.) Решил залогировать конечный sql запрос - получилось такое.

    antonfin, 11 Августа 2010

    Комментарии (2)