mysql_real_escape_string / Говнокод #13028 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
DELIMITER $$

DROP PROCEDURE IF EXISTS get_breadcrumbs$$
CREATE PROCEDURE get_breadcrumbs(IN current_id BIGINT(20), show_home TINYINT(1))

    READS SQL DATA

    BEGIN

        DECLARE buff_id BIGINT(20);
        DECLARE buff_parent_id BIGINT(20);

        DECLARE done_search TINYINT(1);
        DECLARE current_depth BIGINT(20);

        SET done_search = 0;
        SET current_depth = 0;
        SET buff_id = NULL;

        CREATE TEMPORARY TABLE breadcrumbs (id BIGINT(20), depth BIGINT(20)) ENGINE = MEMORY;

        findloop : WHILE done_search = 0 DO

            SELECT id, parent_id INTO buff_id, buff_parent_id FROM documents WHERE id = current_id;

            IF buff_id IS NULL THEN

                IF show_home != 0 THEN

                    SELECT id, parent_id INTO buff_id, buff_parent_id FROM documents WHERE alias = '/';
                    IF buff_id IS NOT NULL THEN
                        INSERT INTO breadcrumbs (id, depth) VALUES(buff_id, current_depth);
                    END IF;

                END IF;

                LEAVE findloop;

            END IF;

            INSERT INTO breadcrumbs (id, depth) VALUES(buff_id, current_depth);

            SET current_id = buff_parent_id;
            SET current_depth = current_depth + 1;
            SET buff_id = NULL;

        END WHILE findloop;

        SELECT

            d.id,
            d.parent_id,
            d.name,
            d.alias,
            b.depth

        FROM breadcrumbs b
        INNER JOIN documents d ON d.id = b.id
        ORDER BY b.depth DESC;

    END$$

DELIMITER ;

Хлебные крошки по id, parent_id.. Психанул...

Запостил: deep deep, (Updated )

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

  • На вид, как будто собирает глубину вложенности в parent-child иерархии...

    А такое же, но через WITH не сделать?
    Ответить
    • Цэ мускуль - он не умеет.
      Посему вот такая говнокожа..
      Ответить
  • А чего минусуют? Неуж то решение не полохо?
    Ответить
    • Сикель тяжело читабелен. И быстро понять в чем говнецо, без пристального вдумчивого чтения, не получится. Вот и минусуют...

      > Неуж то решение не полохо?
      А что там в мускуле есть альтернативного?
      Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8