Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyświetlanie odpowiedzi i informacji o osobach zarejestrowanych
Forum PHP.pl > Forum > Przedszkole
pionas
Cześć,

mam takie tabele:
Cytat
forum_topic
topic_id //id watku
topic_subject // tytul watku
topic_date // data zalazenia watku
topic_user // login osoby zakladajacej watek
topic_category // kategoria watku


forum_posts
post_id // id odpowiedzi
post_user // login osoby odpowiadajacej
post_text // tresc odpowiedzi
post_date // data odpowiedzi
post_tid // id watku

users
id // id usera
username // nazwa uzytkownika
mail // adres e-mail
st // status (0 - nieaktywne, 1 - aktywne, 2 - zablokowane)


Pola topic_user i post_user są typu Varchar(100). Dałem tak ponieważ w wybranych kategoriach wątki mogą zakładać osoby niezarejestrowane i tak samo odpowiadać i mój problem polega na tym że nie wiem jak zrobić aby wyświetlało wszystkie wątki i dodatkowo jeśli mamy daną osobę w bazie to jej informacje. Zrobiłem to z LEFT JOIN, ale wyświetla mi wszystkie kombinacje, a nie tak jak powinno czyli aby do każdego rekordu sprawdziło czy jest coś w users....

Cytat
select post.*, users.* FROM forum_posts post LEFT JOIN users ON post.user=users.username WHERE post.tid=".intval(abs($id))." ORDER BY post.post_id ASC LIMIT $start,$limit;


Proszę o pomoc
qrzysztof
A INNER JOIN próbowałeś?
hondek
Nie wiem czy JOIN po 2 polach VARCHAR to dobry pomysł, może po prostu dodaj pole user_id w forum_posts i wtedy zrob left join po user_id, a w razie gdy user_id == NULL czytaj login z innego pola w bazie np. post_user
pionas
Z INNER JOIN nie próbowałem, ale co do LEFT JOIN to jedyne co pomaga to group by post.post_id ale i tak zapytanie trwa kilkanaście sekund i ze 100 rekordów w forum_posts robi mi ponad 70 tysięcy rekordów (baza users zawiera ponad 20k).
Mogę zrobić tak że zapiszę sobie do jakieś tablicy wyniki z forum_posts i do drugiej tablicy nazwy użytkownika i potem wykonać drugie zapytanie które sprawdzi czy te loginy są w bazie danych i jak są to pobierze ich informacje a jak nie to nie i potem przypiszę je do odpowiednich postów... Tylko że tu wykonuję dwa zapytania, w miarę wydajne, a jednym da radę to zrobićquestionmark.gif
hondek
i pozakładaj indeksy na pola którymi joinujesz tabele
pionas
O bajka, dałem indeksy i jest pięknie biggrin.gif

[EDIT]
Cytat
Nie wiem czy JOIN po 2 polach VARCHAR to dobry pomysł, może po prostu dodaj pole user_id w forum_posts i wtedy zrob left join po user_id, a w razie gdy user_id == NULL czytaj login z innego pola w bazie np. post_user


a jakby miało wyglądać takie zapytanie? Gdzie tego if'a wtedy dać? Po SELECT czy po WHERE? Mogę prosić jakiś przykład?
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.