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

    −164

    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
    SELECT 
    IF(d.`type`='string',t_string.oin_id,
    IF(d.`type`='int',t_int.oin_id,
    IF(d.`type`='text',t_text.oin_id,
    IF(d.`type`='enum',t_enum.oin_id,
    IF(d.`type`='float',t_float.oin_id,
    IF(d.`type`='set',t_set.oin_id,
    0)))))) AS oin_id,
    
    t_float.value AS value_float,
    t_string.value AS value_string,
    t_int.value AS value_int,
    t_text.value AS value_text,
    t_enum.value AS value_enum,
    t_set.value AS value_set,
    
    
    d.* FROM `sites__obj_info_data` d
    LEFT JOIN `sites__obj_info_data_string` t_string ON t_string.`id`=IF(d.`type`='string',d.`oid_id`,0)
    LEFT JOIN `sites__obj_info_data_float` t_float ON t_float.`id`=IF(d.`type`='float',d.`oid_id`,0)
    LEFT JOIN `sites__obj_info_data_int` t_int ON t_int.`id`=IF(d.`type`='int',d.`oid_id`,0)
    LEFT JOIN `sites__obj_info_data_text` t_text ON t_text.`id`=IF(d.`type`='text',d.`oid_id`,0)
    LEFT JOIN `sites__obj_info_data_enum` t_enum ON t_enum.`id`=IF(d.`type`='enum',d.`oid_id`,0)
    LEFT JOIN `sites__obj_info_data_set` t_set ON t_set.`id`=IF(d.`type`='set',d.`oid_id`,0)
    WHERE d.`eid`=1

    Для реализации динамических таблиц

    Запостил: clgs, 19 Июля 2013

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

    • Многие проходили через этот ад и израиль, но я всегда думал, что для этой цели case подходит более, нежели if. Не потребуется такого обилия улыбающихся скобочек.
      Ответить
    • не использовать ли нам NoSQL?
      Ответить

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