Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]warunek sql php
mirobor
post 6.04.2017, 20:34:10
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

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


Mam 2 tabele
cinemas
cid | nazwa

films
fid | fcid | state

gdzie films.fcid to relacje do cinemas.cid. Wiele rekordów w films może mieć te same fcid, czyli wiele filmów może mieć ten sam cid dla cinemas.
Potrzebuję dowiedzieć się, czy WSZYSTKIE films DLA DANEGO fcid mają state = 1.
Na zasadzie true or false

Ten post edytował mirobor 6.04.2017, 20:41:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Tomplus
post 7.04.2017, 05:30:40
Post #2





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Tutaj nie potrzeba PHP zwykły JOIN

Kod
SELECT f.* FROM films f INNER JOIN cinemas c ON c.cid = f.fcid WHERE f.state = 1;
Go to the top of the page
+Quote Post
Pyton_000
post 7.04.2017, 07:08:44
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


@tomplus To nie załatwi problemu smile.gif

Kod
SELECT COUNT(IF(state = 0, 0, null)) as 'status_0' FROM films WHERE fcid = 123

Jeśli wynik == 0 znaczy że wszystkie fcid mają status 0;
Go to the top of the page
+Quote Post
mirobor
post 7.04.2017, 11:06:08
Post #4





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

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


Może zbyt to skomplikowałem. Inaczej na realnym przykładzie:
films
id | cinemaID | state
state możę być: 0, 1, 2, 3
Znam cinemaID i chcę sprawdzić, czy dla danego cinemaID wszystkie rekordy (może być wiele o różnych 'state') maja state > 1

Jeżeli wszystkie rekordy dla cinemaID mają status>1 wykonuję akcję
Jeżeli istnieje choćby 1 rekord o state<2 dla danego cinemaID nie robię nic.

Ten post edytował mirobor 7.04.2017, 11:09:20
Go to the top of the page
+Quote Post
nospor
post 7.04.2017, 11:12:17
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




select count(id) from films where cinemaid = 123 and state < 2

To zapytane zwroci ci liczbe filmow dla danego kina ze stanem < 2. Potem zwykly warunek IF w php


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

"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
mirobor
post 7.04.2017, 13:19:52
Post #6





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

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


Problematyczne w tym rozwiązaniu jest to, że jeżeli nie ma w films rekordu dla cid zapytanie zwróci wartość tak jak dla warunku
Go to the top of the page
+Quote Post
nospor
post 7.04.2017, 13:53:43
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Szukasz dziury w calym.... prosze

select count(id), cinemaid from films where cinemaid = 123 and state < 2

teraz zwroci ci inny wyynik


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

"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: 15.07.2025 - 07:58