Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: IF/CASE - Operacje warunkowe na tekstach
Forum PHP.pl > Forum > Bazy danych > MySQL
shimano
Witam.

Slecze juz dobrch kilka godzin nad IF i CASE w MYSQLu i nie moge dojsc do rozwiazania. Przeczytalem setki metrow stron i manuali i nic.

Konkretnie chodzi o to, zeby zrobic cos takiego:

Tabela:
- Pola:
-- id
-- tresc

id - wiadomo; tresc - jakis przykladowy tekst wielowyrazowy.

I teraz caly bajer w tym, zeby zrobic zapytanie, ktore sprawdzaloby najpierw, czy np. "pies" figuruje w polu tresc, jezeli tak, to usunac to, a jezeli nie to dopisac np. na koncu.

Wsumie wszystko co bedzie do tego potrzebne juz opanowalem, poza tym, jak zrobic te sprawdzenie i ewentualne dalsze wykonanie danego dzialania w zaleznosci od wyniku sprawdzania

Na moj rozum to mogloby to byc cos na styl:
  1. CASE
  2. WHEN
  3. (SELECT `tresc` FROM `test` WHERE `id`='1' AND `tresc` LIKE '%pies%' LIMIT 1 )
  4. THEN
  5. (UPDATE `test` SET `tresc`=(REPLACE(tresc, "pies", "")))
  6. WHEN
  7. (SELECT `tresc` FROM `test` WHERE `id`='1' AND `tresc` NOT LIKE '%pies%' LIMIT 1 )
  8. THEN
  9. (UPDATE `test` SET `tresc`=CONCAT('pies', tresc))
  10. END;


Jednak cos takiego nie dziala i wsumie sie nie dziwie, aczkolwiek milo by bylo, gdyby ktos podsunal pomysl jak to rozwiazac, aby zadzialalo?
melkorm
nie lepiej zrobić to po stronie php'a ? czyli jeżeli znajdzie wiersz to update jeżeli nie to nie ?
shimano
Cytat(melkorm @ 26.06.2009, 00:21:15 ) *
nie lepiej zrobić to po stronie php'a ? czyli jeżeli znajdzie wiersz to update jeżeli nie to nie ?


To by bylo zbyt proste i zbyt duzo miejsca by zajmowalo smile.gif
skowron-line
Cytat(shimano @ 26.06.2009, 08:49:59 ) *
To by bylo zbyt proste i zbyt duzo miejsca by zajmowalo smile.gif

Miejsca gdzie w edytorze questionmark.gif A słyszaj kolega o terminie "wydajność"
nospor
ale kombinacje alpejskie

  1. UPDATE tabela SET pole = IF (tuwaruneknaistnieniezadanegociagu, tureplace,tudopisanie)

Proste, lekkie i przyjemne.
Zapytanie w IF uzupelnij sobie sam. Tu masz niezbedne funkcje
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
shimano
Cytat(skowron-line @ 26.06.2009, 11:00:37 ) *
Miejsca gdzie w edytorze questionmark.gif A słyszaj kolega o terminie "wydajność"


Od kiedy to wiele instrukcji php + wiele zapytan do mysql jest wydajniejsze od jednego zapytania sql? Gratuluje koledze wydajnych aplikacji przy takim toku myslenia.
A co do miejsca to wlasnie odnosi sie to do wydajnosci.

Cytat(nospor @ 26.06.2009, 11:07:02 ) *
ale kombinacje alpejskie

  1. UPDATE tabela SET pole = IF (tuwaruneknaistnieniezadanegociagu, tureplace,tudopisanie)

Proste, lekkie i przyjemne.
Zapytanie w IF uzupelnij sobie sam. Tu masz niezbedne funkcje
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html


Jakos nie wiele mi to pomaga;/ Jak juz pisalem wczesniej, przesiedzialem wiele godzin nad CASE'ami oraz IF'ami ale nie moge nic wymyslec.
nospor
Cytat
Jakos nie wiele mi to pomaga;/


blinksmiley.gif
PRzeciez ja ci podalem rozwiązanie niemalze na dloni. Ty jedynie musisz wstawic rzeczy.
tureplace - replace ktory juz masz w kodzie
tudopisanie - concat ktory juz masz w kodzie
tuwaruneknaistnieniezadanegociagu - glupie LOCATE, ktore jest w linku co ci podalem

Cytat
Jak juz pisalem wczesniej, przesiedzialem wiele godzin nad CASE'ami oraz IF'ami ale nie moge nic wymyslec.
To co ty napisales to jakies dzikie kombinacje alpejskie. Ja ci podalem prosty update jako szablon a ty musisz tam wstawic to co chcesz. Kurcze, pomysl troche, bo to proste jak budowa cepa
shimano
No wkoncu udalo mi sie!

  1. UPDATE `test`
  2. SET `tresc` = (CASE
  3. WHEN `tresc` LIKE '%pies%'
  4. THEN
  5. REPLACE(tresc, 'pies', '')
  6. WHEN `tresc` NOT LIKE '%pies%'
  7. THEN
  8. CONCAT(tresc, 'pies')
  9. END)
  10. WHERE `id`='1'


Oraz analogicznie do IF
  1. UPDATE `test`
  2. SET `tresc` = IF(
  3. `tresc` LIKE '%pies%',
  4. REPLACE(tresc, '', ''),
  5. CONCAT(tresc, 'pies')
  6. )
  7. WHERE `id`='1';


Caly czas bylem blisko, tylko moj blad lezal w skladni warunku. Zamiast poprostu krotko "`tresc` LIKE `%pies%`" to sie niepotrzebnie rozwijalem z "SELECT `tresc` FROM `test` WHERE `id`='1' AND `tresc` LIKE '%pies%' LIMIT 1"

Proste;)

I jeszcze male sprostowanie, dlaczego zalezalo mi bardziej na CASE, niz IF - poprostu moge obsluzyc wiecej warunkow... Ktorych bedzie kilka;)
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.