Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][MSSQL][SQL]Jedna komenda SELECT
mike75
post 29.02.2012, 11:27:05
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.02.2012

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


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.
Go to the top of the page
+Quote Post
nospor
post 29.02.2012, 11:30:21
Post #2





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Czy to jest podchwytliwe pytanie?
  1. SELECT * FROM tabela WHERE urzadzenie = 'A' OR urzadzenie = 'D'


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
poli25
post 29.02.2012, 11:31:31
Post #3





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


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
Go to the top of the page
+Quote Post
sadistic_son
post 29.02.2012, 11:37:25
Post #4





Grupa: Zarejestrowani
Postów: 1 476
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


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.

Ten post edytował sadistic_son 29.02.2012, 11:39:03


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
poli25
post 29.02.2012, 11:40:16
Post #5





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


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'

Ten post edytował poli25 29.02.2012, 11:43:57
Go to the top of the page
+Quote Post
sadistic_son
post 29.02.2012, 11:56:54
Post #6





Grupa: Zarejestrowani
Postów: 1 476
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


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.

Ten post edytował sadistic_son 29.02.2012, 11:57:10


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
poli25
post 29.02.2012, 12:00:10
Post #7





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


no ale pytanie tez jest masłem więc moze odpowiedz z masłem tez jest ok wink.gif
Go to the top of the page
+Quote Post
thek
post 29.02.2012, 12:01:19
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
nospor
post 29.02.2012, 12:01:32
Post #9





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mike75
post 29.02.2012, 12:14:13
Post #10





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.02.2012

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


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)

Ten post edytował mike75 29.02.2012, 12:22:01
Go to the top of the page
+Quote Post
--mike75--
post 2.03.2012, 19:50:12
Post #11





Goście







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.
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 Wersja Lo-Fi Aktualny czas: 24.04.2024 - 23:25