Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] znajdź rekordy, które w przynajmniej jednej kolumnie mają wartość 0
alekto
post 4.09.2013, 13:02:46
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.06.2013

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


Mam taką tabelę:
TABELA
id / A / B / C / data


w kolumnach A/B/C mogę mieć wartość 1 lub 0. Data to zapis daty, np. 2013-06-05.

Chciałabym wyciągnąć wszystkie wiersze, w których:
- wartość 0 pojawia się w przynajmniej jednej kolumnie (A, B lub C) z założeniem, że dla tego rekordu dowolna kolumna A/B/C ma wartość 1.
- warunek jest spełniony dla określonej daty.

Jak to zrobić?

Próbowałam:

select ID
from tabela t1
where data = '2013-08-25'
and exists (select 1 from tabela where t1.id = id
or A <> '1'
or B <> '1'
or C <> '1'
or D <> '1')


ale to zupełnie nie to, czego szukam. Czy macie jakieś pomysły?
Go to the top of the page
+Quote Post
mmmmmmm
post 4.09.2013, 13:54:09
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  1. WHERE a*b*c=0 AND a+b+c>0
Go to the top of the page
+Quote Post
thek
post 4.09.2013, 20:57:41
Post #3





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




Zauważ, że może być tylko 0 lub 1... A więc wystarczy, że jest tylko jedno 0. Tym samym warunek spełnia wszystko co nie ma we wszystkich kolumnach 1, ale 1 musi wystąpić choć raz. Najbardziej ogólny przypadek więc to: suma wartości w interesujących nas kolumnach jest mniejsza niż liczba kolumn, ale jednosześnie choć jedna ma 1. Tu mamy 3 kolumny... a więc
  1. WHERE a+b+c BETWEEN 1 AND 2

W przypadku większej ilości odpowiednio:
  1. WHERE a+...+n BETWEEN 1 AND liczba_kolumn_brana_pod_uwagę-1


--------------------
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
alekto
post 5.09.2013, 09:36:28
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.06.2013

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


Takie proste i takei genialne, dziekuje baaasmiley.gif


Ten post edytował alekto 5.09.2013, 09:36:42
Go to the top of the page
+Quote Post
sazian
post 7.09.2013, 10:55:04
Post #5





Grupa: Zarejestrowani
Postów: 1 043
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


równie dobrze można wykorzystać operator in tylko w nieco inny sposób niż się go widuje zazwyczaj, czyli
  1. 1 IN (A,B,C)
Go to the top of the page
+Quote Post
nospor
post 7.09.2013, 10:58:07
Post #6





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




@sazian no wlasnie nie, bo twoj warunek lyknie pola gdzie wszedzie jest 1, a wyraznie jest zaznaczone, ze musi byc przynajmniej jedno 0


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

"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

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: 19.04.2024 - 13:18