Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Dwie tabele współpracujące ze sobą
ZeTu
post
Post #1





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

Ostrzeżenie: (0%)
-----


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ąć.



Ten post edytował ZeTu 8.04.2012, 20:21:25
Go to the top of the page
+Quote Post
droslaw
post
Post #2





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

Ostrzeżenie: (0%)
-----


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");
Go to the top of the page
+Quote Post
ZeTu
post
Post #3





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

Ostrzeżenie: (0%)
-----


Już sobie poradziłem (IMG:style_emoticons/default/smile.gif) Ale dzięki (IMG:style_emoticons/default/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");


Ten post edytował ZeTu 8.04.2012, 20:35:33
Go to the top of the page
+Quote Post
droslaw
post
Post #4





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ZeTu
post
Post #5





Grupa: Zarejestrowani
Postów: 217
Pomógł: 8
Dołączył: 8.12.2010

Ostrzeżenie: (0%)
-----


Sortuje zawsze po id, bo chodzi mi o to, żeby wyświetlało komentarze od najnowszych do najstarszych i już (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 02:24