Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Wyświetlanie odpowiedzi i informacji o osobach zarejestrowanych
pionas
post 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 :)
Go to the top of the page
+Quote Post
qrzysztof
post 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.
Go to the top of the page
+Quote Post
hondek
post 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 :)
Go to the top of the page
+Quote Post
pionas
post 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ćquestionmark.gif


--------------------
Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
Go to the top of the page
+Quote Post
hondek
post 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 :)
Go to the top of the page
+Quote Post
pionas
post 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 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?

Ten post edytował pionas 29.11.2011, 07:49:05


--------------------
Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2024 - 14:36