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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
SELECT *
FROM `table`
WHERE `parent_id` = NULL
OR `parent_id` IN (
    SELECT `id` FROM `table` WHERE `parent_id` = NULL
)

Страная оптимизация запроса

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

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

  • Гость:
    IS будет работать медленее чем явное указание потому как будет производится тест на boolean выражения, соль не в этом, child запрос дублирует root запрос то есть у нас идет сначало проверка первого условия а затем и второго которое фактически его дублирует, то что там есть индексы это конечно хорошо, вот только логическое или сначало выполнит полностью первый запрос а потом второй и толку от child запроса 0
    Ответить
  • Иван:
    Если это запрос MySQL, то `parent_id` = NULL будет не правильно работать
    Ответить
  • Запрос рабочий - он выбирает первый и второй уровень дерева.
    И подзапрос вполне корректный, #2 - ошибаешься, что он дублирует основной.
    Другое дело - можно было сделать лучше и оптимальнее, но клеймить говнокодом?..
    Ответить
  • Какой движок?
    =/IS NULL и IN будут по разному работать.
    Ответить
  • Так какая СУБД?
    в Firebird например любое сравнение с NULL возвращает false, для этого используется IS.

    Для трехуровнего дерева работать не будет очевидно. Хороший говнокод 🙂
    Ответить
  • В Oracle и в любой СУБД, которая правильно поддерживает ANSI SQL, parent_id = NULL будет равно false всегда.
    Тут же явно MySQL, но и в нем не факт, что в старших версиях это будет работать.
    Ответить
    • Может и будет. MySql может работать по стандарту ANSI, если задать специальный флаг.
      Ответить

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

Переведи на "PHP", guest!

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


    8