mirobor
6.04.2017, 20:34:10
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
Tomplus
7.04.2017, 05:30:40
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;
Pyton_000
7.04.2017, 07:08:44
@tomplus To nie załatwi problemu

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;
mirobor
7.04.2017, 11:06:08
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.
nospor
7.04.2017, 11:12:17
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
mirobor
7.04.2017, 13:19:52
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
nospor
7.04.2017, 13:53:43
Szukasz dziury w calym.... prosze
select count(id), cinemaid from films where cinemaid = 123 and state < 2
teraz zwroci ci inny wyynik
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.