Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> if exists... wyrzuca błąd, że nie istnieje...
grzemach
post 5.03.2013, 10:54:55
Post #1





Grupa: Zarejestrowani
Postów: 121
Pomógł: 4
Dołączył: 9.06.2007
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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...


--------------------
Go to the top of the page
+Quote Post
luckyps
post 5.03.2013, 11:41:22
Post #2





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


A moze zrobic counta i sprawdzic czy zwroci zero czy nie questionmark.gif
Go to the top of the page
+Quote Post
grzemach
post 5.03.2013, 12:47:26
Post #3





Grupa: Zarejestrowani
Postów: 121
Pomógł: 4
Dołączył: 9.06.2007
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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){}


Ten post edytował grzemach 5.03.2013, 12:48:16


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 06:17