![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam taki problem:
2 tabelki mysql (news, comments) utworzone w ten sposób:
I teraz chcę jednym zapytaniem pobrać newsy wraz z ilością komentarzy dla każdego. Kombinuję w ten sposób:
Ale nie działa :/ Proszę o pomoc ![]() -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Jak na moje skromne oko brakuje Ci powiązania między tabelami, które będzie pokazywało które commenty są przypisane do danego news'a.
dodatkowa kolumna w tabeli comments powinna zalatwic sprawe. Potem wystarczy wykorzystać w zapytaniu JOIN i powinno zwracać to co trzeba. -------------------- 404
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Heh, faktycznie, dopiero teraz zauważyłem brak powiązania pomiędzy tabelami, a miałem to zrobić na samym początku. Ok, teraz tabela comments wygląda tak:
Aczkolwiek nie wiem, jak wykonać owe łączenie... ![]() Pozdrawiam -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Strzelam z palca i bez możliwości sprawdzenia:
-------------------- 404
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 23 Dołączył: 3.06.2006 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
W tabeli comment dodaj kolumnę news_id i przy każdym komentarzu do tego pola daj id newsa a potem już tylko:
Ten post edytował mokry 14.03.2008, 21:20:26 -------------------- Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 4 Dołączył: 1.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ewentualnie możesz zrobić kolumnę 'comments' w tabeli z newsami i tam przechowywać liczbę komentarzy
![]() Ten post edytował KCG 14.03.2008, 22:12:37 -------------------- 9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..." |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki za chęci, niestety, żadne zapytanie nie chce działać
![]() @Cienki1980 Kod Blad krytyczny: Nie udalo sie wykonac zapytania: select n.*, count(c.id) as cnt from news n inner join comments c on n.id=c.obj_id order by n.id desc Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause @mokry, a MySQL obsługuje w ogóle zapytanie w zapytaniu? [wersja 3.23.58] Kod Blad krytyczny: Nie udalo sie wykonac zapytania: SELECT news.*, (SELECT COUNT(comments.id) FROM comments WHERE news.id = comments.obj_id) AS ile_komentarzy FROM news ORDER BY news.id DESC Something is wrong in your syntax obok 'SELECT COUNT(comments.id) FROM comments WHERE news.id = comments' w linii 1 Wkleiłem to co mi wyrzucił sterownik bazy, bo jednocześnie widać zapytanie i błąd. KCG, myślałem nad tym, ale wydawało mi się to niepotrzebnym utrudnieniem (zwłaszcza w PA). Już równie dobrze mógłbym wywoływać oddzielne zapytanie dla każdego newsa, (pobierające ilość komentarzy) ale wolałbym tego uniknąć... -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Pisałem z palca i nie miałem gdzie sprawdzić. Bardziej chciałem pokazać jak wykorzystać joina a nie 100% poprawne rozwiązanie.
Co do GROUP to musisz dodać grupowanie po odpowiednich kolumnach na końcu zapytania i zapytanie powinno ruszyć. -------------------- 404
|
|
|
-Wieviór- |
![]()
Post
#9
|
Goście ![]() |
KCG, myślałem nad tym, ale wydawało mi się to niepotrzebnym utrudnieniem (zwłaszcza w PA). Już równie dobrze mógłbym wywoływać oddzielne zapytanie dla każdego newsa, (pobierające ilość komentarzy) ale wolałbym tego uniknąć... To jest jednak dobre rozwiązanie. Szczególnie jeśli komentarzy masz dużo. Pomyśl, że skrypt będzie przy każdym wyświetlanym newsie zliczał powiedzmy 10 komentarzy z tabeli, w której będzie jej 10 000 ;]... po prostu przy dodawaniu komentarza dopisuj 1, przy usuwaniu odejmuj 1 i tyle. Możesz nawet pokusić się o triggery ;] |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
@Wieviór, ale to ma być bardzo mała stronka i tak szczerze nie spodziewam się więcej niż kilkudziesięciu komentarzy do kilkunastu newsów
![]() Obecnie mam zapytanie wyglądające tak:
Nie generuje ono już żadnych błędów, ale nie działa ![]() Pewnie nie jest to jakiś poważny błąd, niestety nie do przejścia przeze mnie, więc ponownie proszę o pomoc... -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
@Wieviór, ale to ma być bardzo mała stronka i tak szczerze nie spodziewam się więcej niż kilkudziesięciu komentarzy do kilkunastu newsów ![]() Obecnie mam zapytanie wyglądające tak:
Nie generuje ono już żadnych błędów, ale nie działa ![]() Pewnie nie jest to jakiś poważny błąd, niestety nie do przejścia przeze mnie, więc ponownie proszę o pomoc... Jeżeli w tabeli comments nie ma żadnego wpisu nie pokaże się żaden wpis ... dzieje się tak bo wykorzystałeś INNER JOIN. Zastąp INNER JOIN tekstem LEFT JOIN i powinno coś się pokazać. PS. Żeby dowiedzieć się czym się różni INNER od LEFT zapraszam do manuala ![]() -------------------- 404
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie, wygląda na to, że w końcu zaczęło działać
![]() -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 29.06.2025 - 08:06 |