Skocz do zawartości
Zaloguj się, aby obserwować  
ToFFiK

Zapytanie odejmujące 1 wartość

Polecane posty

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

<?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 przez Kamikadze (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

To niestety ci nie mogę pomóc (sql jeszcze u mnie kuleje :D)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość squeezer

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 przez squeezer (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

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

@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

@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ł tongue.gif. Niech chłopak pozna różne podejścia i rozwiązania dla tego samego problemu.

Edytowano przez adam.gekosale (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×