• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP/MySQL Pobranie wyników statystyk

+1 głos
433 wizyt
pytanie zadane 25 września 2016 w SQL, bazy danych przez Kshyhoo Użytkownik (780 p.)

Mam problem ze skonstruowaniem zapytania.

    Tabela "user"
    +----+---------+
    | ID |   NAME  |
    +----+---------+
    |  1 | Adam    |
    |  2 | Bernard |
    |  3 | Cezary  |
    +----+---------+
    Tabela "adv"
    +----+-------------------------+
    | ID |          NAME           |
    +----+-------------------------+
    |  1 | Nazwa pierwsza          |
    |  2 | Nazwa druga             |
    |  3 | Nazwa trzecia           |
    ...
    | 23 | Nazwa dwudziestotrzecia |
    +----+-------------------------+
    Tabela "stat"
    +------+------+-------+
    | id_u | id_a | score |
    +------+------+-------+
    |    1 |    1 |     1 |
    |    1 |    2 |    -2 |
    |    1 |    3 |     0 |
    ...
    +------+------+-------+

Chciałbym osiągnąć taki wynik (nazwa usera, kolumny adv 1-23):

    +---------+---------+---------+---------+---------+---------+
    | u.name  |  a.id_1 |  a.id_2 |  a.id_3 |    ...  | a.id_23 |
    +---------+---------+---------+---------+---------+---------+
    | Adam    |       1 |      -2 |       0 |         |      -1 |
    | Bernard |       2 |      -2 |       1 |         |       2 |
    | Cezary  |       3 |       0 |       0 |         |       0 |
    +---------+---------+---------+---------+---------+---------+

To moje zapytanie:

    SELECT  a.id, u.name, s.score
    FROM stat s
    LEFT JOIN adv a ON s.id_a=a.id
    LEFT JOIN user u ON s.id_u=u.id
        GROUP BY a.id, u.name
        ORDER BY a.id

Moje zapytanie daje mi id(adv), name, score w trzech kolumnach. Nie wiem, jak to ugryźć.

Jak inaczej mógłbym skonstruować tabelę ze statystykami, żeby uprościć zapytania? Ew. jak przekonwertować w PHP?

1 odpowiedź

0 głosów
odpowiedź 25 września 2016 przez Kshyhoo Użytkownik (780 p.)
 
Najlepsza

Nikt nie odpowiedział, a ja znalazłem rozwiązanie. Wklejam, może się komuś przyda. Taki wstępniak, trochę trzeba jeszcze dopieścić:

<table border="1">
	<thead>
	</thead>
	<tbody>
<?php
$sql3 = "SELECT id, name FROM users ORDER BY name";
$users = mysqli_query($con, $sql3);
for ($i=0;$i<mysqli_num_rows($users);$i++) {
?>
		<tr>
<?php
  $user = mysqli_fetch_array($users);
?>
			<td>
<?php
  echo $user["name"];
?>
			</td>
<?php
	$sql4 = "SELECT * FROM stat WHERE id_u={$user["id"]}";
	$score = mysqli_query($con, $sql4);

  for ($j=0;$j<mysqli_num_rows($score);$j++) {
    $scor = mysqli_fetch_array($score);
?>
			<td>
<?php
    echo $scor["score"];
    if ($j<mysqli_num_rows($score)-1) {
?>
			</td>
<?php
		}
  }
?>
		</tr>
<?php
}
?>
	</tbody>
</table>

Podobne pytania

0 głosów
1 odpowiedź 449 wizyt
+1 głos
2 odpowiedzi 809 wizyt
pytanie zadane 8 lipca 2021 w SQL, bazy danych przez Kenzy Obywatel (1,160 p.)
0 głosów
1 odpowiedź 1,894 wizyt

93,753 zapytań

142,713 odpowiedzi

323,356 komentarzy

63,347 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...