dzaiałanie zapytania SQL zależne od parametru

0

chcę zrobić coś takiego:
jeśli parametr = 0
SELECT * FROM osoby

a jeśli parametr = 1
WHERE imie='Adam'

Czyli w zależności od parametru ma zwrócić całą tabelę lub przefiltrowaną.
Da się coś takiego zrobić ?

0

jaki silnik bazy?

0

dynamicznie buduj zapytanie w programie

0
Misiekd napisał(a)

dynamicznie buduj zapytanie w programie

Tak właśnie robię. Problem w tym ze zapytanie jest długie i przydałoby się to w wielu miejscach, dlatego chciałem zrobić to prościej.

0

select * from osoby where (@parametr = 1 and imie = 'Adam') or @parametr = 0

0
Pele2 napisał(a)
Misiekd napisał(a)

dynamicznie buduj zapytanie w programie

Tak właśnie robię. Problem w tym ze zapytanie jest długie i przydałoby się to w wielu miejscach, dlatego chciałem zrobić to prościej.

No to chyba lepiej dostarczać bazie tylko takie zapytanie jakie jest potrzebne, trym bardziej, że jest długie, niż wysyłać 3x większe, żeby użyć tylko części.

0

Najlepiej tak jak już ktoś powiedział:

Ogólny schemat:

WHERE((@param = Column) OR (@param IS NULL))

Teraz podając jako wartość parametru: NULL, ten parametr "nie będzie brany pod uwagę"

0
Deti napisał(a)

Najlepiej tak jak już ktoś powiedział:
WHERE((@param = Column) OR (@param IS NULL))

Przy takich rozwiązaniach zalecam sprawdzić czy SZDB skorzysta z indeksu po Column. Bo często jest tak że nie skorzysta. Plusem jest natomiast to że zapytanie można przygotować raz a później je wykonywać (mówię o przygotowaniu poprzez metodę Prepare SZDB).

Jest jeszcze taka opcja, że możesz sobie w treści zapytania jako string'u trzymać jakieś słowa kluczowe, i przed wykonaniem zamieniać je na odpowiednie klauzule WHERE, bez zbędnych warunków. Zresztą co lepsze techonologie dostępu do DB mają coś takiego jak makra, które chyba by się tu sprawdziły (czytałem nie używałem).

0

a skąd się bierze ten parametr? bo może warto zrobić to w programie, jeśli zapytania robisz z poziomu programu... inaczej, to podejrzewam, ze musisz zrobić procedurę, która będzie to obsługiwała... w MySQL już się chyba da robić takie procedury...

1 użytkowników online, w tym zalogowanych: 0, gości: 1