Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP] Problem z COUNT
Forum PHP.pl > Forum > Przedszkole
Lilo
Witam, mój problem polega na tym, że wynik jest zliczany i sumowany, a chciałabym by był tylko zliczany i z osobna interpretowany dla każdego kursu.

Czyli tak : mam dwie tabele

tabela :start

|id_start |data ```|`kurs |
--------------------------------
11 ``` |2010-07-30| 9
--------------------------------
77 ```|2010-07-30| 6
--------------------------------

tabela: wyjazd

| id_wyj | id_start |
|---------+-----------|
|1```` | 11 ```` |
|---------+-----------|
| 2```` | 11```` |
|---------+-----------|
| 3 ```` | 11```` |
|---------+-----------|
| 4 ```` | 11```` |
|---------+-----------|
| 5 ```` | 77```` |
|---------+-----------|
| 6 ```` | 77```` |
-----------------------
  1. $zapytanie= "SELECT COUNT(w.id_wyj) AS liczba FROM wyjazd AS w INNER JOIN start AS s WHERE s.id_start=w.id_start AND s.data='2010-07-30'";
  2. $wynik= mysql_query($zap, $polaczenie);
  3. while ($rek = mysql_fetch_assoc($wynik)) {
  4. $liczba = $rek['liczba'];
  5. $miejsca= 30-$liczba;
  6.  
  7. echo '<label><input name="form" id="form" type="radio" value="'. $rek['kurs'].' "/>'. $rek['kurs'].'&nbsp;'.$miejsca.'<br></label>';
  8.  
  9. }


W wyniku while otrzymuję
| kurs `` | miejsca |
|---------+-----------|
| 6```` | 24 ``` |
|---------+-----------
| 9 ```` | 24 ``` |
|---------+-----------|

A chciałabym mieć tak :
| kurs `` | miejsca |
|---------+-----------|
| 6 ```` | 28 ```` |
|---------+-----------|
| 9 ```` | 26 ``` |
|---------+-----------|

Bardzo proszę o pomoc, nie wiem, czy to przez semantykę zapytania, czy to w ogóle jest wykonywalne ?.

Przepraszam za apostrofy, inaczej tabele byłyby nieczytelne.
skarabe.pl
Spróbuj:
  1. SELECT s.kurs, COUNT(w.id_wyj) AS liczba FROM wyjazd AS w INNER JOIN start AS s WHERE s.id_start=w.id_start AND s.DATA='2010-07-30' GROUP BY s.kurs
everth
Dodaj jeszcze może DISTINCT
  1. SELECT DISTINCT s.kurs, COUNT(w.id_wyj) AS liczba FROM wyjazd AS w INNER JOIN start AS s WHERE s.id_start=w.id_start AND s.DATA='2010-07-30' GROUP BY s.kurs
Lilo
Wasza propozycja jest jak najbardziej trafna, ale przez to, że zapytanie jest zależne od innego zapytania o czym nie wspomniałam sad.gif. Problem wciąż jest.

  1. $zapytanie1= "SELECT ..."; // Zapytanie spełnia złożony warunek pobiera min kurs w wyniku czego mam kurs : 4; 5; 6; 9.
  2. $wynik1= mysql_query($zapytanie1, $polaczenie);
  3. while ($rekord = mysql_fetch_assoc($wynik1)){
  4.  
  5. $zapytanie=" SELECT DISTINCT s.kurs, COUNT(w.id_wyj) AS liczba FROM wyjazd AS w INNER JOIN start AS s WHERE s.id_start=w.id_start AND s.data='2010-07-30' GROUP BY s.kurs";
  6. $wynik= mysql_query($zapytanie) or die ('Bł?d: ' . mysql_error());
  7. while ($rek = mysql_fetch_assoc($wynik)) {
  8. $liczba = $rek['liczba'];
  9. $miejsca= 30-$liczba;
  10.  
  11. echo '<label><input name="form" id="form" type="radio" value="'. $rek['kurs'].' "/>'. $rek['kurs'].'&nbsp;'.$miejsca.'<br></label>';
  12.  
  13. }
  14. }


W wyniku while otrzymuję
| kurs `` | miejsca |
|---------+-----------|
| 6```` | 24 ``` |
|---------+-----------
| 6 ```` | 26 ``` |
|---------+-----------|
| 9```` | 24 ``` |
|---------+-----------
| 9 ```` | 26 ``` |
----------------------
Powinno być tak :
| kurs `` | miejsca |
|---------+-----------|
| 4 ```` | 30 ```` | // nie ma kursu w tabeli start, więc $liczba=0 i ilość miejsc pozostaje 30.
|---------+-----------|
| 5 ```` | 30 ``` |
|---------+-----------|
| 6 ```` | 28 ```` |
|---------+-----------|
| 9 ```` | 26 ``` |
|---------+-----------|
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.