Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Dwie tabele współpracujące ze sobą
Forum PHP.pl > Forum > Bazy danych
ZeTu
Witam mam dwie tabele, jedna to artykuły, a druga to komentarze do artykułów.
Tabela artykułów:
nazwa| tresc | data | alias | id
Tabela komentarzy:
do | nick | tresc | email | data | id

Gdzie "do" (w koementarzach), to id artykułu.
Po wpisaniu np. jakis-artykul.html wyswietla artykul o "alias" jakis-artykul i po jego nazwie wyszukuje jego id i po jego id wyszukuje wszystkie komentarze z "do" takim jak "id" artykułu.

A mój problem polega na tym, że gdy wyświetlam w panelu admina wszystkie komentarze, to po kliknięciu na "Pokaz calosc", który znajdowałby się przy każdym fragmencie komentarza przekieruje na adres np. jakis-artykul.html#10 (gdzie 10 to id danego komentarza).

Czyli z jednej bazy muszę pobrać adres artykułu i wyświetlić go razem z id komentarza. A nie mogę dodać do tabeli komentarzy jeszcze jednej kolumny o nazwie np. jakis-artykul, bo w panelu admina przy artykułach można zmieniać dany adres i dlatego w tabeli artykułów jest kolumna o nazwie alias.
I robię to w taki sposób, ale to nie działa:
  1. $id60="http://adres-strony.pl";
  2. $zapytanie = "SELECT `nick`, `tresc`, `email`,`id`,`do` FROM `koentarze` ORDER BY id DESC";
  3. $idzapytania = mysql_query($zapytanie);
  4.  
  5. $link3232 = mysql_fetch_array($zapytanie);
  6. $link2as=$link32a2['0'];
  7.  
  8. $idekalaias2 = mysql_query("SELECT `alias` FROM `artykuly` WHERE `id`='$link2as'");
  9.  
  10. echo '<table align="center"><tr><td>Calosc</td><td>ID</td><td>Nick</td><td>Email</td><td>Tresc</td><td>Usuń</td></tr>';
  11. while ($idekalaias=mysql_fetch_array($idekalaias2))
  12. {
  13. echo '<td><a href="http://'. $id60 .'/'. $idekalaias['alias'] .'.html#'. $wiersz[3] .'" target="_blank">Zobacz calosc</a></td>';
  14. }
  15. while ($wiersz = mysql_fetch_row($idzapytania))
  16. {
  17. $fragment=$wiersz[1];
  18. $fragment = mb_substr($fragment, 0, 46, utf8);
  19. $fragment2="...";
  20. $fragment3="$fragment$fragment2";
  21. echo '<td>'. $wiersz[3] .'</td><td>'. $wiersz[0] .'</td><td>'. $wiersz[2] .'</td><td width="350">'. $fragment3 .'</td><td><form method="POST" action="" enctype="multipart/form-data"><input type="hidden" name="idd" value="'. $wiersz['3'] .'" /><input type="submit" value="Usuń" name="Usun" ></form></td></tr>';
  22. }
  23. echo '</table>';

Wiem, że trochę pomieszane, ale taki mam sposób, żeby nie było, że nic nie próbowałem. Szukałem też na necie z godzinę, ale nie znalazłem czegoś co by mi pomogło. Jeśli zna ktoś na to sposób, to bardzo bym prosił o pomoc.

Udało mi się zrobić takie coś:
  1. $idekalaias5 = mysql_query("SELECT * FROM artykuly LEFT JOIN komentarze ON komentarze.do = artykuly.id");

Tylko teraz jest problem, bo jeśli nie ma komentarzy do jakiegoś artykuły to nie powinno wyświetlać pustych:
  1. <tr><td><a href="artykul-jakis.html#">Zobacz calosc</a></td><td></td><td></td><td></td><td>...</td><td>(...)name="Usuń"(...)</td></tr>

A wyświetla :/

Ok, poradziłem sobie wystarczyło zmienić z LEFT JOIN na RIGHT JOIN i wszystko gra, można zamknąc.
  1. $idekalaias5 = mysql_query("SELECT * FROM artykuly RIGHT JOIN komentarze ON komentarze.do = artykuly.id");

Czyli gdy wartość "id" z artykułów nie ma takich samych wartości "do" z komentarzy, to nie wyświetla.
Pozdrawiam i proszę o zamknięcie, można też usunąć.

droslaw
Wyświetla artykuły do których nie ma konentarzy bo złączyłeś tabele za pomocą LEFT JOIN. Zamiast tego powinno być JOIN.
  1. $idekalaias5 = mysql_query("SELECT * FROM artykuly JOIN komentarze ON komentarze.do = artykuly.id");
ZeTu
Już sobie poradziłem smile.gif Ale dzięki smile.gif Ale jak już napisałeś, to jak to wyświetlić teraz od tyłu?
Ok, już wiem, tak jak myślałem.
  1. $idekalaias5 = mysql_query("SELECT * FROM artykuly RIGHT JOIN komentarze ON komentarze.do = artykuly.id ORDER BY komentarze.id DESC");
droslaw
Użyj klauzuli ORDER BY. Tak możesz sortować po dacie ale nadaj tabelom alias, żeby można było odróżnić kolumny data z obu tabel.
ZeTu
Sortuje zawsze po id, bo chodzi mi o to, żeby wyświetlało komentarze od najnowszych do najstarszych i już smile.gif
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.