Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [solved] kwerenda z parametrem
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
witam,

mam problem z kwerendą z parametrem. Do kwerendy wprowadza się 2 parametry - numer zamówienia i oznaczenie wyrobu z zamówienia. Chciałbym aby przy wprowadzeniu drugiego parametru wynikiem była tabela z wyrobami gdzie jest tylko to oznaczenie (wpisany parametr nr 2), a w przypadku niewprowadzania 2 parametru wynikiem były wszystkie wyroby z danego zamówienia, gdzie wartość 2 parametru to NULL.


wymyśliłem coś takiego, ale niestety nie działa:

  1. WHERE `zamowienia`.`numer_zamowienia` = @podaj_numer_zamowienia AND `pozycje_zamowieniowe`.`oznaczenie_wz` = (CASE WHEN @podaj_oznaczenie_wz IS NULL THEN NULL ELSE @podaj_oznaczenie_wz END)


czy ktoś mógłby pomóc?
nospor
Pytanie pomocnicze: ty to bedziesz robic w php czy TYLKO I WYLACZNIE w czystym mysql i w ogole do php sie nie bedziesz zblizal?
trueblue
Nie ma operator =NULL.

Spróbuj tak:
  1. WHERE `zamowienia`.`numer_zamowienia` = @podaj_numer_zamowienia AND COALESCE(`pozycje_zamowieniowe`.`oznaczenie_wz` IN (CASE WHEN @podaj_oznaczenie_wz IS NULL THEN NULL ELSE @podaj_oznaczenie_wz END),TRUE)

mihmih
interesuje mnie czysty MySql.

trueblue - przy twojej propozycji wyskakuje mi błąd składni. Nie jestem fachowcem ale nie wiem czy COALESCE powinno być w tym miejscu? Wszystko jest ok gdy usunę COALESCE i TRUE na końcu (ok ze składnią, mój cel nie jest spełniony), lecz Twój kod ma jakiś błąd...

w domu gdzie to teraz sprawdzam mam ograniczone warunki, jutro to na spokojnie sprawdzę w pracy. Składnia jest chyba jednak ok, muszę poczekać do jutra ...
trueblue
Trudno mi jest stwierdzić gdzie leży błąd jeśli nie podałeś całego zapytania.

Podam sprawdzony przykład:
  1. SELECT @podaj_oznaczenie_wz:=1,id
  2. FROM tabela
  3. WHERE COALESCE(id IN (CASE WHEN @podaj_oznaczenie_wz IS NULL THEN NULL ELSE @podaj_oznaczenie_wz END),TRUE)

Tabela zawiera kolumnę id z różnymi wartościami, w tym NULL. Zapytanie wybiera tylko rekordy gdzie id=1 lub id=NULL.

EDIT:
Niepoprawnie zrozumiałem Twój problem.

Odpowiednie rozwiązanie:
z parametrem:
  1. SET @podaj_oznaczenie_wz:=2;
  2. SELECT id
  3. FROM tabela
  4. WHERE COALESCE(id,'') IN (CASE WHEN @podaj_oznaczenie_wz IS NULL THEN '' ELSE @podaj_oznaczenie_wz END)


bez parametru:
  1. SELECT id
  2. FROM tabela
  3. WHERE COALESCE(id,'') IN (CASE WHEN @podaj_oznaczenie_wz IS NULL THEN '' ELSE @podaj_oznaczenie_wz END)


A warunek można uprościć do:
  1. WHERE COALESCE(id,'')=COALESCE(@podaj_oznaczenie_wz,'')
mihmih
ostatnie (uproszczone) rozwiązanie jest idealne! Dzięki!
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.