Skocz do zawartości

Web Hosting Talk

  • progreso.pl

    Partner technologiczny

    Upraszczamy to, co inni starają się komplikować. Prosto, pewnie, przyjaźnie - tak robimy hosting!
  • Kei.pl

    Partner technologiczny

    Kei.pl działa na polskim rynku internetowym od 2000 roku. Obecnie na blisko 300 serwerach w Centrum Danych Kei.pl znajduje się kilkadziesiąt tysięcy stron WWW.
  • S-NET.info

    Partner technologiczny

    S-NET to dostawca usług dla biznesu. Najważniejsze usługi świadczone przez firmę to usługi Centrum Danych, dostęp do Internetu, transmisja danych oraz tranzyt do różnych operatorów.
  • Sprint Data Center

    Partner technologiczny

    Sprint Data Center to jedyne w Polsce północno-wschodniej i jednocześnie jedno z najnowocześniejszych w kraju centrum przechowywania i przetwarzania danych.

 

Zapytanie odejmujące 1 wartość


  • Nie możesz odpowiadać w tym temacie
8 odpowiedzi na ten temat

Zapytanie odejmujące 1 wartość

#1 ToFFiK

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 436 postów
  • Skąd:Katowice
  • Firma:Toffik.NET / StrefaSerwerow.pl / Serversite.eu / MagnetX
  • Imię:Olaf
  • Nazwisko:Twardowski

Napisany 08 sierpień 2011 - 01:44

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 :)

Post powered by ToFFiK

ˆˆˆ © All rights reserved Pozdro

Najtańsze serwery gier slot CS 99gr Serwery VPS Serwery WWW Reseller

U-RP.EU


#2 Kamikadze

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 1577 postów
  • Skąd:Sulejówek
  • Imię:Emil
  • Nazwisko:M

Napisany 08 sierpień 2011 - 01:49

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

Ten post był edytowany przez Kamikadze dnia: 08 sierpień 2011 - 01:50

Darmowy Monitoring serwerów!

SerwerStatus.pl - monitorowanych ponad 70 serwerów z 3 Polskich lokalizacji.


#3 ToFFiK

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 436 postów
  • Skąd:Katowice
  • Firma:Toffik.NET / StrefaSerwerow.pl / Serversite.eu / MagnetX
  • Imię:Olaf
  • Nazwisko:Twardowski

Napisany 08 sierpień 2011 - 02:03

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

Post powered by ToFFiK

ˆˆˆ © All rights reserved Pozdro

Najtańsze serwery gier slot CS 99gr Serwery VPS Serwery WWW Reseller

U-RP.EU


#4 Kamikadze

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 1577 postów
  • Skąd:Sulejówek
  • Imię:Emil
  • Nazwisko:M

Napisany 08 sierpień 2011 - 02:10

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

Darmowy Monitoring serwerów!

SerwerStatus.pl - monitorowanych ponad 70 serwerów z 3 Polskich lokalizacji.


#5 squeezer

    Czasami na forum

  • WHT Pro
  • 37 postów

Napisany 08 sierpień 2011 - 05:43

Zobacz postToFFiK, o 08 sierpień 2011 - 01:44, powiedział:

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.

Ten post był edytowany przez squeezer dnia: 08 sierpień 2011 - 05:54

Optymalizacja MySQL - mysql.ksiazek.info

#6 regdos

    Weteran WHT

  • Moderatorzy
  • PipPipPipPipPipPipPipPip
  • 1505 postów
  • Skąd:Poznań
  • Firma:regdos.com
  • Imię:Tomasz
  • Nazwisko:Regdos

Napisany 08 sierpień 2011 - 06:55

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


#7 adam.gekosale

    Czasami na forum

  • Użytkownicy
  • 40 postów
  • Skąd:Łódź
  • Firma:WellCommerce Spółka z o.o.
  • Imię:Adam
  • Nazwisko:Piotrowski

Napisany 08 sierpień 2011 - 08:29

Zobacz postToFFiK, o 08 sierpień 2011 - 01:44, powiedział:

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




Gekosale.pl - całkowicie darmowe oprogramowanie sklepu internetowego

#8 regdos

    Weteran WHT

  • Moderatorzy
  • PipPipPipPipPipPipPipPip
  • 1505 postów
  • Skąd:Poznań
  • Firma:regdos.com
  • Imię:Tomasz
  • Nazwisko:Regdos

Napisany 08 sierpień 2011 - 09:02

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

#9 adam.gekosale

    Czasami na forum

  • Użytkownicy
  • 40 postów
  • Skąd:Łódź
  • Firma:WellCommerce Spółka z o.o.
  • Imię:Adam
  • Nazwisko:Piotrowski

Napisany 08 sierpień 2011 - 09:39

Zobacz postregdos, o 08 sierpień 2011 - 09:02, powiedział:

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

Ten post był edytowany przez adam.gekosale dnia: 08 sierpień 2011 - 09:41

Gekosale.pl - całkowicie darmowe oprogramowanie sklepu internetowego





1 Użytkowników czyta ten temat

0 użytkowników, 1 gości, 0 anonimowych użytkowników