Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][MSSQL][SQL]Jedna komenda SELECT
Forum PHP.pl > Forum > Przedszkole
mike75
Mam powiedzmy tabele "obsluga". W tej tabeli znajduje sie kolumna "urzadzenie". Kolumna ta moze przyjmowac wartosci A, B lub C, ale czasem moze sie zdarzyc, ze pojawi sie tez wartosc D. Czy mozna napisac jedna komende SELECT, przy pomocy ktorej moge wyszukac wierszy z wartoscia A o ile w kolumnie nie ma wartosci D. W sytuacji kiedy sa wartosci D to wyszuka mi wiersze nie z wartoscia A tylko z D.
nospor
Czy to jest podchwytliwe pytanie?
  1. SELECT * FROM tabela WHERE urzadzenie = 'A' OR urzadzenie = 'D'
poli25
jak moze być wartosc a lub b lub c lub d to jak mozesz miec jednoczesnie a i d jak chcesz sprawdzic czy jest a i d jednoczesnie
sadistic_son
nospor, poli25 chyba nie zrozumieliście kolegi...
  1. $q="SELECT * FROM tabela WHERE urzadzenie = 'D' ";
  2. $sql=$mysql_query($q);
  3. $num=mysql_num_rows($sql);
  4. if($num>0){
  5. //wyswietlanie rekordów z D
  6. }else{
  7. $q="SELECT * FROM tabela WHERE urzadzenie = 'A' ";
  8. // i dalsze wyswietlanie rekordow z A
  9. }


EDIT: Nie wydaje mi się żeby było możliwe wykonanie tego jednym zapytaniem.
poli25
byc może;)

Cytat(mike75 @ 29.02.2012, 11:27:05 ) *
... Czy mozna napisac jedna komende SELECT, przy pomocy ktorej moge wyszukac wierszy z wartoscia A o ile w kolumnie nie ma wartosci D.


a wczesniej jest napisane ze moze byc tylko a,b,c,lub d wiec dla mnie nie logiczne to jest

p.s. moze chodzilo o to

SELECT * FROM obslua WHERE urzadzenie = 'd' and urzadzenie <> 'a'
sadistic_son
Cytat(poli25 @ 29.02.2012, 11:40:16 ) *
a wczesniej jest napisane ze moze byc tylko a,b,c,lub d wiec dla mnie nie logiczne to jest


ID | urzadzenie | costam |
1 | A | sjbcbfd |
2 | B | 34dr24 |
3 | A | dddfff |
4 | D | ggggg |

A teraz?

Gdyby w tabeli były tylko ekordy 1,2 i 3 to kolega chciałby pobrać 1 i 3. Natomiast kiedy są 4 rekordy to chce pobrać już tylko rekord z ID = 4 .

Dobrze rozumiem?


EDIT:
Cytat(poli25 @ 29.02.2012, 11:40:16 ) *
p.s. moze chodzilo o to

SELECT * FROM obslua WHERE urzadzenie = 'd' and urzadzenie <> 'a'
No to to przecież masło maślane ;P Skoro urządzenie jest równe D to przecież zawsze będzie różne od A.
poli25
no ale pytanie tez jest masłem więc moze odpowiedz z masłem tez jest ok wink.gif
thek
A ja myślę, że chodzi o rozwinięcie pierwszego posta nospora, czyli...
Wybieramy wszystkio z tabeli co ma A, albo D, tylko że teraz mamy sens całego wykonać... Jeśli istnieje taki wiersz w kolumnie obsługa, gdzie jest jednocześnie A i D, to ma wziąć pod uwagę wiersz z D, olewając wiersz z A. I wyślę, że jest to wykonalne, ale jako że nie znamy dokładniejszej struktury tabeli to trudno powiedzieć jak mogło by to zapytanie wyglądać, gdyż albo można będzie użyć kombinacji z grupowaniem albo union. Ale bez struktury i tego gdzie są jakieś klucze, trudno powiedzieć i podać gotowe zapytanie.
Ogólnie sens byłby taki "od tyłu"... Wybierz wszystkie rekordy z D, a potem dorzuć wszystkie rekordy, które mają A i nie posiadają jednocześnie D. Przynajmniej tak to według mnie wyglada smile.gif

Wyjaśnienie 2:
Może też być tak, jak rozumuje sadistic_son i jak wprost napisał autor:
Jeśli w tabeli są tylko w kolumnie wartości A, B, C, to wyszukujemy jedynie tych z A. Ale jeśli w kolumnie zostanie wykryta choć jeden wiersz z wartością D, to tylko tych wierszy z D należy wyszukać.
nospor
poli przestan już. Niech autor wyjaśni o co mu chodzi dokładnie. Póki co odpowiedź sadistic_son wydaje się być najbliżej prawdy. No ale to musi rozstrzygnąć autor pytania a nie my między sobą.
mike75
nie spodziewalem sie tak szybkiej reakcji, jakbym wsadzil kij w mrowisko. Dobrze mnie zrozumial Sadistic_son. Wiec czy jest to mozliwe w jednym zapytaniu czy trzeba juz kombinowac? (sam myslałem o sprawdzeniu to w ten sposób co Sadistic_son, ze wpierw sprawdzam D a jak nie to biore A. Nie znam dobrze możliwości języka zapytań SQLa. A chcę jak najwięcej przerzucić na bazę danych)
-mike75-
Udało mi się rozwiązać problem. Wszystko w jednym zapytaniu przy wykorzystaniu funkcji CASE i podzapytań. Trochę to trwało, bo wcześniej nie bawiłem się SQLem i nie wiedziałem jakie możliwości w tym drzemią.
Dzięki wszystkim za pomoc.
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.