[MySQL][PHP] Wyświetlanie odpowiedzi i informacji o osobach zarejestrowanych |
[MySQL][PHP] Wyświetlanie odpowiedzi i informacji o osobach zarejestrowanych |
28.11.2011, 16:58:24
Post
#1
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) |
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 -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
28.11.2011, 17:56:18
Post
#2
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) |
A INNER JOIN próbowałeś?
-------------------- Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
|
|
|
28.11.2011, 18:09:16
Post
#3
|
|
Grupa: Zarejestrowani Postów: 355 Pomógł: 50 Dołączył: 20.08.2007 Skąd: Częstochowa Ostrzeżenie: (0%) |
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
-------------------- przetwornik yt na czasie :)
|
|
|
28.11.2011, 20:03:46
Post
#4
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) |
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ć -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
28.11.2011, 20:11:41
Post
#5
|
|
Grupa: Zarejestrowani Postów: 355 Pomógł: 50 Dołączył: 20.08.2007 Skąd: Częstochowa Ostrzeżenie: (0%) |
i pozakładaj indeksy na pola którymi joinujesz tabele
-------------------- przetwornik yt na czasie :)
|
|
|
29.11.2011, 07:46:47
Post
#6
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) |
O bajka, dałem indeksy i jest pięknie
[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? Ten post edytował pionas 29.11.2011, 07:49:05 -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
Wersja Lo-Fi | Aktualny czas: 15.05.2024 - 14:36 |