Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zapytanie sql
hopsey
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.07.2010

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


Hej wszystkim

mam tabelę produktów z polami:

- id
- nazwa
- promocja (bool)
- cena_promocyjna (float)
- cena (float)

robię wyszukiwarkę (wyszukuje również po cenie) i chcę aby w przypadku produktów gdzie prmocja = 1 porównywał do cena_promocyjna, natomiast gdy promocja = 0 - cena.

próbowałem sklecić coś takiego

  1.  
  2. SELECT * FROM `produkty` WHERE (`promocja` = 1 AND `cena_promocyjna` = ?) OR (`promocja` = 0 AND `cena` = ?)
  3.  


ale nie działa tak jak bym chciał :/

może lepiej zaznaczać te, które spełniają kryteria w obu przypadkach i resztę robić w kodzie? Model produktu ma metodę Produkt::getPrice() która wykrywa czy jest promocja i zwraca właściwe pole.

ktoś ma może jakiś pomysł/sugestię?

Z góry dzięki!
Go to the top of the page
+Quote Post
toaspzoo
post
Post #2





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Co dokładniej byś chciał wyszukać ?

Kod
SELECT * FROM `produkty` WHERE (`promocja` = '1' AND `cena_promocyjna` = '$wysz_cena') OR (`promocja` = 0 AND `cena` = '$wysz_cena')


gdzie

Kod
$wysz_cena = $_GET['cena'];


$_GET/POST cena - to zmienna do wyszukania wink.gif

pzdr
Powód edycji: [thek]: Dałeś TO SAMO zapytanie! To co zrobił autor to prepared statements.


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
hopsey
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.07.2010

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


dzięki toaspzoo, użyłem znaków zapytania, żeby pokazać, w którym miejscu wrzucam cenę. Samo zapytanie jest skonstruowane błędnie.

Nikt nie ma żadnych pomysłów?
Go to the top of the page
+Quote Post
toaspzoo
post
Post #4





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


$pokaz = SELECT......

Zrób to zapytanie, a potem daj

$wiersz = mysql_fetch_array($pokaz);

Wyrzuci Ci wtedy wiersze kolumny w tablicy [0-x] / ['wiersz']

np.

$cena = $wiersz['cena_promocyjna'];
$s_cena = $wiersz['cena'] // ale widzę, że nie masz pola na starą cenę wink.gif

$roznica = $s_cena - $cena;

Jeśli nie wiesz, którą cene ma wyświetlić, to zrób na if if(!empy($wiersz['cena_promocyjna'])) { kod... }


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
pmir13
post
Post #5





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


Na czym konkretnie polega nieprawidłowość tego zapytania ze startera?
Nawiasy nie są potrzebne, bo AND ma wyższy priorytet niż OR, ale poza tym drobnym szczegółem powinno działać dobrze, o ile tylko dobrze podstawiasz cenę do porównania.
"Nie działa tak jakbym chciał" to bardzo ogólne określenie. Może sprecyzuj - dla takich i takich danych zapytanie zwraca to i to, a chciałbym by zwracało to i to.
Go to the top of the page
+Quote Post
hopsey
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.07.2010

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


sorry - okazuje się, że zapytanie jednak działa. musiałem zrobić wcześniej jakąś literówkę.

temat do usunięcia.

dzięki!
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 Aktualny czas: 21.08.2025 - 10:02