MySQL iç içe OLGU hata ben yardıma ihtiyacım var?

3 Cevap php

Ne burada yapmaya çalışıyorum olduğunu: tablo yapılacaklarıma yılında kayıtları tanımlandığı gibi IF $ sütun recurinterval bir değer daha sonra bu kayıtlar için 6 BAŞKA date_scheduled sütun sadece set status_id sütun sıfırlamak var yapılır.

Bu benim) (mysql_error almak hata ...

Eğer SQL sözdizimi bir hata var; yakınındaki kullanılacak doğru sözdizimi için MySQL sunucu sürümü karşılık '! = 0 OLGU recurinterval VE recurinterval date_sche AYAR SONRA IS NOT NULL' manuel kontrol hattında 2 at

Bunu nasıl ifade çalışmaz hale getirebiliriz?

UPDATE todo 
CASE recurinterval != 0 AND recurinterval IS NOT NULL THEN
SET date_scheduled = CASE recurunit
WHEN 'DAY' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval DAY)
WHEN 'WEEK' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval WEEK)
WHEN 'MONTH' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval MONTH)
WHEN 'YEAR' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval YEAR)
END
WHERE todo_id IN ($done) 
ELSE 
SET status_id = 6 WHERE todo_id IN ($done)
END

Ben yukarıdaki gibi revize önce aşağıdaki mySQL deyimi sadece iyi çalıştı.

UPDATE todo 
SET date_scheduled = CASE recurunit
WHEN 'DAY' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval DAY)
WHEN 'WEEK' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval WEEK)
WHEN 'MONTH' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval MONTH)
WHEN 'YEAR' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval YEAR)
END
WHERE todo_id IN ($done) 
AND recurinterval != 0 
AND recurinterval IS NOT NULL

3 Cevap

Şey afaik sadece bir sorgu kullanarak yapmak imkansız bir şey yapmaya çalışıyoruz olmasıdır. Sen recurinterval alanın değerine göre 1 2 sütun güncellemek istiyorum. Yani temelde 2 sorguları içine bölmek gerekir, İlki, yani vardı biri olacaktır.

UPDATE todo 
SET date_scheduled = CASE recurunit
WHEN 'DAY' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval DAY)
WHEN 'WEEK' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval WEEK)
WHEN 'MONTH' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval MONTH)
WHEN 'YEAR' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval YEAR)
END
WHERE todo_id IN ($done) 
AND recurinterval != 0 
AND recurinterval IS NOT NULL

Ve ikincisi, diğer satırlar için olacaktır:

UPDATE todo 
SET status_id = 6
WHERE todo_id IN ($done) 
AND (recurinterval = 0 
OR recurinterval IS NULL)

Bu sorguları çalıştırırsanız istediğiniz sonucu almak gerekir (bir hata sorguları biri sırasında oluşursa değişiklikleri geri böylece büyük olasılıkla bir işlem içinde onları çalıştırmak isteyeceksiniz).

Ben eklemek gerekir inanıyorum 'ZAMAN' ilk CASE anahtar sonra. Yani ilk satırın başlangıcı okur:

UPDATE todo CASE WHEN recurinterval !=0 AND ...

İlk vaka değiştirdiğiniz açıklamada CASE recurinterval != 0 AND recurinterval IS NOT NULL THEN aslında bir IF olmalı gibi geliyor bana