Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwie tabele
Forum PHP.pl > Forum > Bazy danych > MySQL
P3A_MDF
Mam na polibudzie zajecia z php i sql ale nie wiele tego wiec postanowilem sam sie doksztalcic. Zrobilem juz faq teraz robie bloga. Niusy do bloga laduje do tabeli blog1 a komentarze do blogkomen. Chce to wyswietlac tak ze nius a do niego ponizej komentarze i nastepny nius z komentarzami (jak wszedzie).
I dziala, ale powiedziano mi zeby robic to w ten sposob:
  1. $query = ("SELECT * FROM blog1 LEFT JOIN blogkomen ON blog1.numerniusa=blogkomen.numerkomen");

Tak wyglada kod ktory sam zrobilem:
  1. <?php
  2.  
  3. function pokazinnnna5()
  4. {
  5. echo &#092;"<b>pokazinnnna3</b><br />\";
  6. $db = mysql_connect (&#092;"localhost\",\"\", \"\") or die (\"brak połączenia z bazą\");
  7. mysql_select_db (&#092;"rel1\");
  8. //$query = (\"SELECT * FROM blog1 LEFT JOIN blogkomen ON blog1.numerniusa=blogkomen.numer
    k
  9. men\");
  10. $query = (\"SELECT * FROM blog1 ORDER BY numerniusa DESC\");
  11. $result=mysql_query ($query);
  12. print \"<TABLE ALIGN=center BORDER=0 WIDTH=80%><TR><TD ALIGN=center>Wszystkie niusy - Znaleziono \";
  13. print (mysql_numrows($result));
  14. print \" rekordów</TD></TR></TABLE><br>\";
  15. while ($wiersz=mysql_fetch_array($result) )
  16. {
  17. echo \"<br><br><b>BLOG</b> nr: \".$wiersz['numerniusa'].\"<br>tematniusa: \".$wiersz['tematniusa'].\"<br>koment: \".$wiersz['koment'].\"<br><a href=blofor_2.php?blo=dodakomid&nridbloganowy=\".$wiersz['numerniusa'].\">dodaj komentarz</a><br>\";
  18.  
  19. //--- KOMENTARZE
  20. $query1 = (\"SELECT * FROM blogkomen WHERE nriddlabloga = '\".$wiersz['numerniusa'].\"' ORDER BY numerkomen DESC\");
  21. $result1=mysql_query ($query1);
  22. while ($wiersz1=mysql_fetch_array($result1) )
  23. {
  24. $wiersz1['odpwfaq'] = ereg_replace(\"n\", \"<br>\", $wiersz1['odpwfaq']);
  25. echo \"<br>KOMENT nr: \".$wiersz1['numerkomen'].\"<br>ktokom: \".$wiersz1['ktokom'].\"<br>komentblog: \".$wiersz1['komentblog'].\"<br>\";
  26. }
  27. //---- KOMENTARZE
  28. }
  29. mysql_close($db);
  30. }
  31.  
  32. ?>

Czy robie to dobrze? Czy mozna zrobic lepiej ?
oldek
Jest dobrze, czyli źle. Dobrze jest wtedy kiedy masz 2 blogi i 5 komentarzy. Źle gdy blogów będzie 5000 a komentarzy 100000, wtedy komputer klęknie a użytkownik zaśnie.

Co zrobić? Podzielic to na 2 skrypty.
W pierwszym przeglądasz tylko blogi, po 20-30 na jednej stronie, z możliwością odwołania się do siebie po to by pokazać następną lub poprzednią porcję (w SELECT użyj klauzuli LIMIT z parametrem przekazywanym z wywołującego formularza).

Drugi skrypt uruchamiasz po kliknięciu odnośnika wygenerowanego w pierwszym, poda on komentarze do wskazanego bloga (najlepiej w nowym oknie target=_blank). Jeśli przewidujesz że będzie tego dużo, to porcjonowanie także by się przydało.

BTW, 'leftjoin' zalatuje mi Accessem, czy się mylę? cool.gif
LukaszLenart
Cytat(oldek @ 2004-12-18 22:55:38)
BTW, 'leftjoin' zalatuje mi Accessem, czy się mylę? cool.gif

Mylisz sie, LEFT JOIN jest standardem SQLa, a MySQL jest optymalizowany pod wykonywanie zlaczen (LEFT JOIN ROGHT JOIN, etc).

Poza tym podzial na strony jest wskazany
P3A_MDF
Czy pole w tabeli komentarze ktore okresla do ktorego nisua bloga odnosi sie komentarz powinno miec jakies okreslone wlasciwosci?
Czy wystarczy ze bedzie poprostu INTEGER np. (doktoregoniusa INT) questionmark.gif

Nie wiem tez jak poprawnie sprawdzac czy pole jest puste czy nie (np. pole mail). Wartosc domyslna jest ustawiona.
LukaszLenart
Klucze powinny miec taka sama wielkosc, wiec jesli w tabeli blog masz bolg_id int(3) to w tabeli komentarzy powinienies tez miec blog_id int(3). Zlaczenia na takich samych wielkosciach pola sa szybsze (dlatego dla kluczy varchar warto ustawic zero-fill, aby dopelniac wartos w polu zerami - choc obsluga tego jest meczaca)

Sparwdzaj wartosc domyslna
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.