Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/sql] przypisanie rekordów z drugiej tabeli
Forum PHP.pl > Forum > Przedszkole
M@X
Witam.
Mam w bazie dwie tabele tab i tab2. W pierwszej są rekordy z klientami, a w drugiej tabeli po kilka rekordów dla klientów z pierwszej tabeli. Mam problem z wyświetleniem tego. Poniższy kod to fragment edycji tego rekordu, nie moge sobie poradzić z tym aby był wyświetlany dany klient z pierwszej bazy, oraz jego wszystkie rekordy z drugiej tabeli. Rekordy powiązane są kolumną o nazwie ID_klienta w obu bazach są takie kolumny. Kombinuje coś w 16 linijce (while....) ale chyba się zapetlam w pętli smile.gif mógłby ktoś pomóc ?

  1. <?php
  2. $id_edit=$_GET['ID_klienta'];
  3.        $edit_view='SELECT tab.ID_klienta as ID_klienta, tab.Nazwa_kl as Nazwa_kl, tab.opis as opis, tab.kto as kto, tab.data_save as data_save, tab2.ID_klienta as id_kl, tab2.pln as pln, tab2.uwaga as uwaga FROM tab, tab2 WHERE tab.ID_klienta="'.$id_edit.'"';
  4.        $edit_view2=mysql_query($edit_view);
  5.        $ev=mysql_fetch_array($edit_view2);
  6.        echo '<table>';
  7.        echo '<form method="POST" action="?id=2&action=getcheck&ID_klienta='.$_GET['ID_klienta'].'">
  8.        <tr>
  9.        <td align="right"><b>Nazwa klien:</b> </td><td>'.$ev[1].'</td>
  10.        </tr>
  11.    <tr>
  12.        <td align="right"><b>op:</b> </td><td><textarea name="opis" cols="50" rows="1">'.$ev[2].'</textarea></td>
  13.        </tr>';            
  14.            while($evv=mysql_fetch_array($ev))
  15.                    {
  16.                 echo '
  17.            <tr>
  18.            <td align="right"><b>opis:</b> </td><td>'.$evv[6].'</td>
  19.            </tr>';
  20.                    }
  21.            
  22.        echo '<tr>
  23.        <td align="right"><b>Ostatnia modyfikac:</b> </td><td>'.$ev[3].' - '.$ev[4].'</td>
  24.        </tr>
  25.        <tr>
  26.        <td></td><td><input type="submit" name="add" value="Zapisz edycje"></td>
  27.        </tr>
  28.        </form>';
  29.        echo '</table>';
  30. ?>
JoShiMa
Zainteresuj się klauzulą LEFT OUTER JOIN w zapytaniach SQL
M@X
mógłby ktoś skrobnąć kawałek mojego kodu w jaki sposób użyć tego tutaj ? bo z samego tutoriala tego nie wyciągne.
drPayton
Szczerze pisząc nie chce mi sięakurat w Twój kod wnikać, więc na prostym przykładzie:
Tabela klienci (id, imie, nazwisko)
Tabela zakupy (id, id_klienta, kwota)

Chcesz pobrać wszystkich klientów i dla każdego z nich wszystkie 'jego' rekordy z tabeli zakupy

  1. SELECT k.*, z.* FROM klienci AS k LEFT JOIN zakupy AS z ON k.id = z.id_klienta ORDER BY k.nazwisko


Nie uwzględniam tu grupowania, bo to tylko prosty przykład winksmiley.jpg


edit: Jak to wyświetlić:

  1. <?php
  2. // Pobieramy dane z bazy
  3. $query = mysql_query('SELECT k.*, z.kwota FROM klienci AS k LEFT JOIN zakupy AS z ON k.id = z.id_klienta ORDER BY k.id');
  4.  
  5. while($row = mysql_fetch_assoc($query)) {
  6.            /* Zmienna pomocnicza, za pomocą której sprawdzimy czy w danym przebiegu pętli mamy do czynienia z nowym klientem czy też 'robimy' tego samego co poprzednio. Jeśli nowy - wyświetlamy dane */
  7.    if(!isset($tmp) or $row['id'] != $tmp) {
  8.        echo '<br>Klien: ' . $row['imie'] . ' ' . $row['nazwisko'];
  9.    }
  10.    echo '<br><blockquote>' . $row['kwota'] . '</blockquote>';
  11.    $tmp = $row['id'];
  12. }
  13. ?>
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.