ToFFiK 33 Zgłoś post Napisano Sierpień 8, 2011 Mam pytanie, jak zrobić zapytanie, które jeśli będzie liczba powyżej 0, załóżmy 30, to odejmowałby od tej liczby -1, w polu xxx, dziękuję za odpowiedzi Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość Kamikadze Zgłoś post Napisano Sierpień 8, 2011 (edytowany) <?php $zmiena1=jakies_zapytanie; if ($zmiena1 > 0) { $zmiena2 = $zmiena1 - 1; //dalsza część skryptu //zmiena2 jest zmienna po odjęciu jeżeli warunek spełniony // // } else { echo "Zmiena jest mniejsza bądz równa 0"; } ?> Coś takiego? Bo nie rozumiem tego pola xxx Edytowano Sierpień 8, 2011 przez Kamikadze (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
ToFFiK 33 Zgłoś post Napisano Sierpień 8, 2011 Pole w tabeli o nazwie obojętnie jakiej a jeśli już jest potrzebna to ma się nazywac "blokadaooc", nie da się tego zrobić przez zapytanie MySQL? ponieważ chcę to wsadzić do skryptu Pawn, więc PHP raczej się nie przyda Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość Kamikadze Zgłoś post Napisano Sierpień 8, 2011 To niestety ci nie mogę pomóc (sql jeszcze u mnie kuleje ) Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość squeezer Zgłoś post Napisano Sierpień 8, 2011 (edytowany) Mam pytanie, jak zrobić zapytanie, które jeśli będzie liczba powyżej 0, załóżmy 30, to odejmowałby od tej liczby -1, w polu xxx, dziękuję za odpowiedzi Nie wiem do końca czy na pewno o taki efekt Ci chodzi, ale może to coś pomoże: create table tab (xxx int); insert into tab values ('20'); delimiter // create procedure procedura() begin declare a int; select xxx into a from tab; if a > 0 then set a = a-1; end if; update tab set xxx=a; end// delimiter ; mysql> select * from tab\G *************************** 1. row *************************** xxx: 20 1 row in set (0.00 sec) mysql> call procedura; Query OK, 1 row affected (0.00 sec) mysql> select * from tab\G *************************** 1. row *************************** xxx: 19 1 row in set (0.00 sec) Czyli w skrócie, tworzysz procedurę składowaną, która po wywołaniu sprawdza czy wartość w kolumnie xxx w tabeli tab jest większa niż 0. Jeśli tak, zmniejsza ją o 1. Oczywiście Ty prawdopodobnie będziesz musiał to trochę rozbudować (jakieś WHERE, ewentualne dodatkowe warunki - zależy co tak na prawdę potrzebujesz zrobić i na ilu rekordach). Przykład działa tylko dla jednego rekordu w tabeli, jeśli SELECT zwróci Ci więcej wyników, MySQL będzie krzyczał że nie wie co podstawić do zmiennej. Możesz to też zrobić bez procedury, przy pomocy zmiennych: mysql> select xxx into @a from tab; Query OK, 1 row affected (0.00 sec) mysql> update tab set xxx= -> case -> when @a>0 then @a-1 -> end; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 Czyli do zmiennej @a pobierasz wynik SELECTa (tu też pewnie trzeba będzie jakieś WHERE dodać, tak żebyś pobierał tylko jeden rekord) a następnie robisz UPDATE z odpowiednim warunkiem. Edytowano Sierpień 8, 2011 przez squeezer (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
regdos 1848 Zgłoś post Napisano Sierpień 8, 2011 A nie prościej po prostu UPDATE tabela SET xxx=xxx-1 WHERE xxx>0 albo jeżeli am zmiana dotyczyć innej zmiennej bo nie do końca jasno to wynika z Twojego opisu UPDATE tabela SET yyy=xxx-1 WHERE xxx>0 Udostępnij ten post Link to postu Udostępnij na innych stronach
adam.gekosale 40 Zgłoś post Napisano Sierpień 8, 2011 Mam pytanie, jak zrobić zapytanie, które jeśli będzie liczba powyżej 0, załóżmy 30, to odejmowałby od tej liczby -1, w polu xxx, dziękuję za odpowiedzi UPDATE tabela SET columnxxx = CASE WHEN columnyyy > 0 THEN columnyyy - 1 END Udostępnij ten post Link to postu Udostępnij na innych stronach
regdos 1848 Zgłoś post Napisano Sierpień 8, 2011 @up: Tak z ciekawości zapytam, jaki ma sens i wyższość zastosowanie w zapytaniu dodatkowej funkcji CASE jeżeli problem można rozwiązać używając samo UPDATE i WHERE ? Nie mówiąc już o wytaczaniu armaty w postaci procedury składowanej, którą zaproponował @squuezer. Udostępnij ten post Link to postu Udostępnij na innych stronach
adam.gekosale 40 Zgłoś post Napisano Sierpień 8, 2011 (edytowany) @up: Tak z ciekawości zapytam, jaki ma sens i wyższość zastosowanie w zapytaniu dodatkowej funkcji CASE jeżeli problem można rozwiązać używając samo UPDATE i WHERE ? Nie mówiąc już o wytaczaniu armaty w postaci procedury składowanej, którą zaproponował @squuezer. Podałem tylko jako przykład z tego powodu że dzięki niemu ToFFiK będzie w stanie ustalić sobie więcej różnych warunków w ramach jednego query. Czysto edukacyjne podejście co nie oznacza że uważam swoje rozwiązanie za lepsze. Akurat w tym konkretnym przypadku oczywiście wystarczy to co zaproponowałeś. Jeżeli jednak chcielibyśmy ustawić np. 3 warunki to z moim CASE (czy procedurką squuezer) da się to szybciochem zrobić. Może procedura to zbyt wiele, ale lepiej wiedzieć że tak też to można rozwiązać. Od nadmiaru wiedzy jeszcze nikt nie umarł . Niech chłopak pozna różne podejścia i rozwiązania dla tego samego problemu. Edytowano Sierpień 8, 2011 przez adam.gekosale (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach