операторы case хранимой процедуры mysql [дубликат]

Свойство parentNode элемента предоставляет вам родительский узел. Элементы имеют функцию insertBefore , которая вставляет элемент перед другим ссылочным элементом (перемещая его, если он уже находится в другом месте в дереве). И узлы имеют previousSibling , который дает вам предыдущий узел-брат (который может быть или не быть элементом). Итак:

  function swapDiv (elm) {var previous = findPrevious (elm);  if (previous) {elm.parentNode.insertBefore (elm, previous);  }}  

... где findPrevious выглядит так:

  function findPrevious (elm) {do {elm = elm  .previousSibling;  } while (elm & amp; elm.nodeType! = 1);  return elm;  }  

... где ваши атрибуты onclick должны быть:

  onclick = "swapDiv (this);"   

... хотя вы можете захотеть вместо этого подключиться к событию DOM2 ( addEventListener или attachEvent в IE).

Немного OT, но могу ли я рекомендовать использовать любую из нескольких доступных библиотек, которые облегчат вашу жизнь, например Prototype , jQuery , Закрытие [ ! d2] или любой из нескольких других . На самом деле, была ошибка в более ранней версии этого, потому что это было , что давно, поскольку я имел дело с DOM напрямую. : -

)

61
задан Sinister Beard 19 December 2014 в 10:28
поделиться

3 ответа

CASE больше похожа на инструкцию switch. Он имеет два синтаксиса, которые вы можете использовать. Первый позволяет использовать любые команды сравнения, которые вы хотите:

CASE 
    WHEN user_role = 'Manager' then 4
    WHEN user_name = 'Tom' then 27
    WHEN columnA <> columnB then 99
    ELSE -1 --unknown
END

Второй стиль - это когда вы только изучаете одно значение и немного более кратким:

CASE user_role
    WHEN 'Manager' then 4
    WHEN 'Part Time' then 7
    ELSE -1 --unknown
END
105
ответ дан Kailas 16 August 2018 в 02:26
поделиться
  • 1
    То, что вы говорите, имеет смысл, я все еще смущен тем, где он находится внутри остальной части запроса, который я пробовал SELECT *, your-code AS role_order FROM table Но я продолжаю получать ошибки. Вы можете показать пример, используя целый запрос? Спасибо! – JD Isaacks 2 August 2010 в 17:41
  • 2
    Я понял это, вы должны просто закончить «END». не "END CASE" dev.mysql.com/doc/refman/5.0/en/case-statement.html Спасибо! – JD Isaacks 2 August 2010 в 17:48
  • 3
    Для тех, кто не читал связанные документы выше, вы также не можете прочитать этот комментарий, но в случае, если вы это сделаете: обратите внимание, что существуют две разные формы CASE, с очень похожим синтаксисом, но несколько разные цели / использование. См. Также этот вопрос . – Air 2 May 2014 в 01:40
  • 4
    @AirThomas: На самом деле то, что он описывает, является выражением CASE , согласно документации MySQL. В то время как OP ссылается на оператор CASE . – Svip 2 January 2015 в 17:17
  • 5
    @Svip Абсолютно правильно, я их отменил. Хороший улов. (Для того, чтобы оставить комментарий чистым, +1 это, когда вы его прочитали, и я также удалю его.) – Air 2 January 2015 в 17:25

CASE в MySQL является оператором и выражением , где каждое использование несколько отличается.

Как утверждение, CASE работает так же, как оператор switch, и полезен в хранимых процедурах, как показано в этом примере из документации (см. выше):

DELIMITER |

CREATE PROCEDURE p()
  BEGIN
    DECLARE v INT DEFAULT 1;

    CASE v
      WHEN 2 THEN SELECT v;
      WHEN 3 THEN SELECT 0;
      ELSE
        BEGIN -- Do other stuff
        END;
    END CASE;
  END;
  |

Однако в качестве выражения он может использоваться в статьях:

SELECT *
  FROM employees
  ORDER BY
    CASE title
      WHEN "President" THEN 1
      WHEN "Manager" THEN 2
      ELSE 3
    END, surname

Кроме того, как в качестве оператора, так и в качестве выражения, первый аргумент может быть опущен, и каждый WHEN должен принять условие.

SELECT *
  FROM employees
  ORDER BY
    CASE 
      WHEN title = "President" THEN 1
      WHEN title = "Manager" THEN 2
      ELSE 3
    END, surname

Я предоставил этот ответ потому что в другом ответе не упоминается, что CASE может функционировать как выражение, так и выражение. Основное различие между ними состоит в том, что форма оператора заканчивается на END CASE, а форма выражения заканчивается только END.

12
ответ дан Air 16 August 2018 в 02:26
поделиться

Мне нужен простой пример использования случая, с которым я мог бы играть, это даже не требует таблицы. Это возвращается нечетно или даже зависит от того, являются ли секунды нечетными или даже

SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;
0
ответ дан zzapper 16 August 2018 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: