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

    −857

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    INSERT INTO `modules`
    VALUES (
    '', 5, 1, 2, 3, 4, 5, 6, 7, 8, 9, (
    SELECT max( `order` )
    FROM `modules`
    WHERE `root` =5
    ), 'Y'
    )

    #1093 - You can't specify target table 'modules' for update in FROM clause

    newpdv, 30 Января 2011

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

    −855

    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
    declare @ДеньНедели int
    set @ДеньНедели = 1
    while @ДеньНедели <= 7
    begin
      if @ДеньНедели = 1
      begin
        update #TTT set Пн = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
      end
      if @ДеньНедели = 2
      begin
        update #TTT set Вт = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
      end
      if @ДеньНедели = 3
      begin
        update #TTT set Ср = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
      end
      if @ДеньНедели = 4
      begin
        update #TTT set Чт = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
      end
      if @ДеньНедели = 5
      begin
        update #TTT set Пт = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
      end
      if @ДеньНедели = 6
      begin
        update #TTT set Сб = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
      end
      if @ДеньНедели = 7
      begin
        update #TTT set Вс = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
      end
      set @ДеньНедели = @ДеньНедели + 1
    end

    Интересный разбор дня недели, цикл проходим 7 раз, с заходом в каждый if 1 раз

    mrvlmor, 25 Января 2011

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

    −143

    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
    if exists(
      select 1
      from PList
      where userId = @userId
      and opCode = 'SSDD' 
    ) 
    begin
       select @SSDD = ssValue
       from  PList 
              where userId = @userId
                and opCode = 'SSDD' 
       .................
    	<some code>
       .................
    end

    оптимальненько

    3.14159265, 25 Января 2011

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

    −858

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    FUNCTION get_yesterday
          RETURN DATE
       AS
          dd   VARCHAR2 (2);
          mm   VARCHAR2 (2);
          yy   VARCHAR2 (4);
       BEGIN
          SELECT TO_CHAR (SYSDATE - 1, 'yyyy')
            INTO yy
            FROM DUAL;
       END get_yesterday;

    Вычисляем вчерашнюю дату на PL/SQL

    mshogin, 18 Января 2011

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

    −860

    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
    SELECT
        node.nid AS nid,
        location.latitude AS location_latitude,
        location.longitude AS location_longitude,
        node.title AS node_title,
        node.language AS node_language,
        location.lid AS location_lid,
        (IFNULL(ACOS(0.501284223863*COS(RADIANS(location.latitude))*(0.863228195442*COS(RADIANS(location.longitude)) + 0.504813908876*SIN(RADIANS(location.longitude))) + 0.865282686124*SIN(RADIANS(location.latitude))), 0.00000)*6362105.74365) AS location_distance,
        node_data_field_rate_prior.field_rate_prior_amount AS node_data_field_rate_prior_field_rate_prior_amount,
        node_data_field_rate_prior.field_rate_prior_currency AS node_data_field_rate_prior_field_rate_prior_currency,
        node.type AS node_type, node.vid AS node_vid,
        node_data_field_rate_prior.field_rate_reg_amount AS node_data_field_rate_prior_field_rate_reg_amount,
        node_data_field_rate_prior.field_rate_reg_currency AS node_data_field_rate_prior_field_rate_reg_currency,
        node_data_field_rate_prior.field_rate_vip_amount AS node_data_field_rate_prior_field_rate_vip_amount,
        node_data_field_rate_prior.field_rate_vip_currency AS node_data_field_rate_prior_field_rate_vip_currency
      FROM node node
      LEFT JOIN location_instance location_instance ON node.vid = location_instance.vid
      LEFT JOIN location location ON location_instance.lid = location.lid
      LEFT JOIN content_type_dta_kiosk node_data_field_rate_prior ON node.vid = node_data_field_rate_prior.vid
      WHERE node.type in ('dta_kiosk')
        AND (location.latitude > 40.9991009563 
          AND location.latitude < 59.0008990437 
          AND location.longitude > 5.91311892539 
          AND location.longitude < 34.0868810746
        )
      ORDER BY location_distance ASC

    vectoroc, 14 Января 2011

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

    −859

    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
    "SELECT c.type AS type, 
                                      ELT(c.type, g.genre_id, l.label_id, f.film_id, a.actor_id, s.show_id, ch.channel_id,aw.award_id) AS id,
    				  ELT(c.type, g.value, l.value, f.real_name, a.real_name, s.real_name, ch.name, aw.description) AS real_name,
    				  ELT(c.type, NULL, NULL, f.name, a.name, s.name, NULL, NULL) AS name
    				  FROM connector AS c
    				  LEFT JOIN genres AS g ON (c.second = g.genre_id)
                                      LEFT JOIN labels AS l ON (c.second = l.label_id)
                                      LEFT JOIN films AS f ON (c.second = f.film_id)
                                      LEFT JOIN actors AS a ON (c.second = a.actor_id)
                                      LEFT JOIN shows AS s ON (c.second = s.show_id)
                                      LEFT JOIN channels AS ch ON (c.second = ch.channel_id)
                                      LEFT JOIN awards AS aw ON (c.second = aw.award_id)
                                      WHERE c.first = ".$_SESSION['user_id']

    Вот как это делается!

    Elfet, 14 Января 2011

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

    −853

    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
    billats=# select * from t_month_names order by m_begin desc limit 10;
        month    |  m_begin   |   m_end    
    -------------+------------+------------
     Декабрь 04  | 2004-12-01 | 2004-12-31
     Ноябрь 04   | 2004-11-01 | 2004-11-30
     Октябрь 04  | 2004-10-01 | 2004-10-31
     Сентябрь 04 | 2004-09-01 | 2004-09-30
     Август 04   | 2004-08-01 | 2004-08-31
     Июль 04     | 2004-07-01 | 2004-07-31
     Июнь 04     | 2004-06-01 | 2004-06-30
     Май 04      | 2004-05-01 | 2004-05-31
     Апрель 04   | 2004-04-01 | 2004-04-30
     Март 04     | 2004-03-01 | 2004-03-31

    это не шутка.

    SanityIO, 12 Января 2011

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

    −858

    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
    billats=# select * from lists limit 40;
     type_ |        name        |        value
    -------+--------------------+----------------------
       102 | debt_list_progress | 0
       102 | debt_size          | 0
         5 | 0                  | Тюменьпрофбанк
        10 | 1                  | Физ. лицо
        10 | 2                  | Юр. лицо
        10 | 3                  | Бюджет. орг.
        11 | 0                  | Все группы
        11 | 1                  | Приход. ордер
        11 | 3                  | Расч. счет
        11 | 4                  | Касса
        11 | 6                  | Взаимозачеты
        20 | 1                  | Установка
        20 | 2                  | Ремонт
        20 | 3                  | Задание
        20 | 4                  | Сообщение
        20 | 5                  | Авария
        21 | 1                  | Ген.директор
        21 | 12                 | Дежурный оператор
        21 | 3                  | Гл.бухгалтер
        21 | 5                  | Нач. абон.отдела
        21 | 6                  | Линейщик
        21 | 7                  | Инженер АТС
        21 | 9                  | Кассир
        22 | boss               | 1
        22 | irina              | 3
        22 | serg               | 100
        22 | tanya              | 9
        22 | ugin               | 100
        23 | 001                | сегодня
        23 | 002                | завтра
        23 | 003                | послезавтра
        23 | 010                | на этой неделе
        23 | 011                | 1 неделя
        23 | 012                | 2 недели
        23 | 020                | в этом месяце
        23 | 021                | 1 месяц
        23 | 022                | 2 месяца
        25 | ugin               | [email protected]
        30 | 103                | Прямая линия
        30 | 110                | 2-х мегабитный канал

    Все есть объект.

    SanityIO, 12 Января 2011

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

    −861

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    CREATE FUNCTION "insert_payment" (integer) RETURNS integer AS '                                                                                                                     
    DECLARE                                                                                                                                                                             
            l_payment       integer;                                                                                                                                                    
    BEGIN                                                                                                                                                                               
            INSERT INTO payments (client,type_,pdate,number_)                                                                                                                           
            VALUES ($1,4,current_date,nextval_(''payments_number_1_seq''));                                                                                                             
                                                                                                                                                                                        
            SELECT INTO l_payment last_value FROM payments_id_seq;                                                                                                                      
            RETURN l_payment;                                                                                                                                                           
    END;' LANGUAGE 'plpgsql';

    Функция должна вставлять платеж и возвращать его id.
    Под нагрузкой конечно же 8 строка возвращает нен тот id. (когда несколько параллельных транзакций успевают сделать вставку.)
    Что интересно - возвращаемый функцией id используется другой хранимкой для проставления суммы платежа. И это пости всегда работает :)
    Перл от "отцов основателей".

    SanityIO, 12 Января 2011

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

    −183

    1. 1
    2. 2
    3. 3
    $sql = "DELETE  FROM ".PREFIX."_orders
                WHERE id = '".$order_id."'
    	    ORDER BY order_date DESC";

    1_and_0, 28 Декабря 2010

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