Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Rekordy z dwóch tabel w jednej funkcji
Bellum
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 2.03.2010
Skąd: ta pewność?

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


Witam otóż posiadam FORUM IBP3.
Dążę do tego by stworzyć stronę główną, która to zawiera menu z odpowiednimi subkategoriami z forum => każda subkategoria zawiera w sobie odpowiednio związane z nią tematy a więc jest aktywnym odnośnikiem => gdzie po kliknięciu wyświetla się lista tematów z danej kategorii; a że raczkuję w PHP być może nawet się czołgam, to proszę o porady.


  1. $mysql = "SELECT pid,post FROM posts WHERE topic_id IN(7)";
  2. $wykonaj = @mysql_query($mysql) or die('<br />Niepoprawny wiersz bądź kolumna<br />'.mysql_error());
  3. echo '<DIV ID="MENU"><dl id="menu0">';
  4. while ($wiersz = mysql_fetch_row($wykonaj))
  5. {
  6. echo '<dt>'. $wiersz[0] .'</dt><dd>'. $wiersz[1] .'</dd>';
  7. }
  8. echo '</dl></DIV>';


Funkcja wyświetla PID oraz POST, który sobie wybrałem, natomiast chciałbym by zamiast PID wyświetlany był odpowiedni tytuł danego postu, lecz znajduje się on w innej tabeli TOPICS => TITLE; Ja natomiast nie wiem w jaki sposób wyświetlić dane z dwóch tabel w jednej funkcji - to moje pytanie.

Pozdrawiam serdecznie


Ten post edytował Bellum 2.03.2010, 22:35:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Bellum
post
Post #2





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 2.03.2010
Skąd: ta pewność?

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


Cytat(thek @ 3.03.2010, 09:28:36 ) *
Ponieważ powinieneś połączyć te posty z tematami, ale w warunku nie określasz, że posty mają być tylko z tych tematów już ograniczonych. Najlepiej jest połączyć posty z tematami po polu łaczącym i w warunku dodać, że interesują Cię tylko rekordy, gdzie kategoria ma określoną wartośc. To już się realizuje nie łaczeniem tabel poprzez przecinek, ale używając ON i wskazując po czym łączysz obie tabele.
A więc:
  1. SELECT t.title, p.post FROM posts p JOIN topics t ON p.title_id = t.id WHERE t.forum_id IN (7)
Zwróć uwagę na stosowanie aliasów (p oraz t). Używam ich by odróżnić kolumny w obu tabelach. W obu bowiem na bank jest kolumna ID i bez tego baza nie wiedziała by które id używam do łączenia. Przez alias wie, że t.id to id w tabeli topics, a dodatkowo, że forum_id ma wyszukać także w tej tabeli. Zaś pola ma z określonych tabel także wybierać poprzez sprawdzenie aliasu. Poza tym polecam Ci sprawdzić co powoduje użycie zamiast JOIN także LEFT JOIN oraz RIGHT JOIN. Myślę, że może Cię to zaciekawić.

Dzięki! działa perfekcyjnie poza szczegółami:
W tabeli posts nie ma czegoś takiego jak title_id jest topic_id a w topics nie ma id tylko tid

W rezultacie poprawnie działający skrypt wygląda tak:
  1. SELECT t.title, p.post FROM posts p JOIN topics t ON p.topic_id = t.tid WHERE t.forum_id IN (11)

Z 20 minut się głowiłem o co w tym kodzie w ogóle chodzi, racją jest, że bliższe zapoznanie się z php nie jest wcale takie trudne, może i jest frustrujące ale efekty mniam.

Opóźniły mnie problemy z serwerem o ładne dwa tygodnie. Wracając do meritum, owe moje głowienie trapiło czy przypadkiem tytuły się nie powtarzają, wyświetlałem listę nazw tytułów gdyż nie zauważyłem 2x wierszy[0] co oczywiście dawało podwójny efekt nazw tytułów; po usunięciu tego błędu, wszystko wróciło do normy jednak, nadal niektóre tytuły się powtarzały a jasne przecież jak słońce jest, że tematy zawierały również odpowiedzi użytkowników! i co naturalne w tym przypadku będzie wyświetlanie ich postów; tak już jest jak szuka się dziury w szczegółach a każda treść pod tym samym tytułem się różniła (IMG:style_emoticons/default/laugh.gif) .

Dlatego mam do ciebie kolejne pytanie thek oraz do innych jaki parametr dodać do skryptu by wyświetlało tylko pierwsze posty z tematów.


EDIT:

Poradziłem sobie samodzielnie:
  1. SELECT t.title, p.post FROM posts p JOIN topics t ON p.topic_id = t.tid WHERE t.forum_id IN (11) AND p.author_id IN (2)
Jest też drugi sposób new_topic
  1. SELECT t.title, p.post FROM posts p JOIN topics t ON p.topic_id = t.tid WHERE t.forum_id IN (11) AND p.new_topic IN (1)
Działa poprawnie i nie występują problemy w obu przypadkach.

Ten post edytował Bellum 19.03.2010, 21:31:36
Go to the top of the page
+Quote Post

Posty w temacie


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: 29.12.2025 - 19:04