Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: if exists... wyrzuca błąd, że nie istnieje...
Forum PHP.pl > Forum > Bazy danych > MySQL
grzemach
Witam,
Mam bazę która potrzebuje usunąć kolumnę.
Kolumna ta zmieniła trochę właściwości i została przeniesiona do innego pola.
Usunięcie jest proste i wykonuje zwykłego dropa po wykonaniu tej komendy (czyli kopiowanie danych):
  1. UPDATE zepages_news SET `activationDate`=FROM_UNIXTIME(IF(EXISTS(SELECT * FROM information_schema.COLUMNS WHERE table_schema = 'kl00076_dvvDB' AND table_name = 'zepages_news' AND column_name ='createDate'), `createDate`, 1362477579)) WHERE `activationDate`=0;


I to działa super, za pierwszym razem czyli gdy kolumna istnieje. Po usunięciu jej niestety wykrzacza się i wyrzuca, że nie istnieje "createDate" co jest prawdą, ale właśnie po to jest sprawdzenie
  1. EXISTS(SELECT * FROM information_schema.COLUMNS WHERE table_schema = 'kl00076_dvvDB' AND table_name = 'zepages_news' AND column_name ='createDate')

Da się takie zapytanie w jednym sqlu zrobić?

Niestety trzeba aktualizować w ten sposób, bo jest kilka stron na tym samym CMSie i nie wszystkie są aktualizowane w jednym momencie...
luckyps
A moze zrobic counta i sprawdzic czy zwroci zero czy nie questionmark.gif
grzemach
nie bardzo mam pomysł jak by countem można to sprawdzić, bo jeśli kolumna nie istnieje - to count również wyrzuci błąd...

Nie miałem pomysłu inaczej jak również nie mam trochę czasu aby zagłębiać się w to... pominąłem więc skrypt aktualizacyjny... niestety chyba on się nie sprawdzi, za dużo rzeczy pojawia się "niespodziewanych" I już w tym momencie jest przeładowany, a później to będzie masakra (za rok czy za dwa)... więc, zrobiłem to tak:
  1. try{
  2.  
  3. $db = new Database();
  4. // add activationDate field (if needed)
  5. $l = $db->querySQL(
  6. 'select * from information_schema.columns where table_schema = \''.DB_CONFIG_NAME.'\' and table_name = \''.DB_TABLE_NAME_MODULE_NEWS.'\'
  7. and column_name = \'activationDate\'');
  8. if(mysql_num_rows($l)==0){
  9. try{
  10. $sql = 'ALTER TABLE '.DB_TABLE_NAME_MODULE_NEWS.' ADD `activationDate` datetime NOT NULL AFTER `groupId`';
  11. $db->querySQL($sql);
  12. }catch (DatabaseException $e){};
  13. }
  14.  
  15. // copy createDate to activationDate
  16. $l = $db->querySQL(
  17. 'select * from information_schema.columns where table_schema = \''.
  18. DB_CONFIG_NAME.'\' and table_name = \''.DB_TABLE_NAME_MODULE_NEWS.'\' and column_name =\'createDate\'');
  19. if(mysql_num_rows($l)>0){
  20. try{
  21. $sql = 'update '.DB_TABLE_NAME_MODULE_NEWS.' set `activationDate`=FROM_UNIXTIME(`createDate`) WHERE `activationDate`=0';
  22. $db->querySQL($sql);
  23. }catch (DatabaseException $e){};
  24. $list[0][$colName] = '';
  25. }
  26. }catch (DatabaseException $e){}
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.