Kom ihåg mig?
Home Menu

Menu


klurig mySQL fråga (php)

 
Ämnesverktyg Visningsalternativ
Oläst 2009-12-03, 15:43 #1
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Standard klurig mySQL fråga (php)

Hejsan!
Har nu stött på ett problem... jag driver sidan nyhetsarkiv.se och i systemet finns det tillgänglighet att kommentera en artikel.
Artiklarna ligger i en tabell och kommentarerna i en.
Men nu vill jag göra en lista över mest kommenterade artiklarna i form av "Mest diskuterade"... jag har googlat i säkert någon timme utan resultat.
kommentarerna har en kolumn "postid" som är id't på artikeln som kommentaren tillhör.

Någon som har en lösning? jag har försökt med array_sort() mm...
men får inte riktigt till det så den räknar av antal kommentarer per artikel...

Tacksam för svar!
Med vänliga hälsningar!
//Philip Andersson!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-03, 15:47 #2
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Något sånt här borde fungera:
select count(postid) as antal_kommentarer,
postid
from kommentartabellen
group by postid
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-03, 16:29 #3
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
$sql = "select count(pid) as antalet,
pid
from comments
group by pid";
while($line = mysql_fetch_assoc(mysql_query($sql))){
echo $line['pid'];
echo "<br>";
}
?>[/CODE]
pid = postid som i förra posten...

Resultatet blir en oändligt lång lista med samma pid som i första kommentaren...
Kod:
40
40
40
40
40
osv....
har jag gjort fel ? eller är mysql-frågan fel ställd?

tack!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-03, 16:36 #4
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
jag skulle kunna tänka mig att det borde funka med att först använda någon form av array sort by count eller något och sedan köra array_unique på dem så får man ju fram listan...
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-03, 17:07 #5
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
Du borde kunna köra något liknande:

select
pid,
(select count(*) from comments where pid=c.pid) as antalet
from comments c
order by antalet desc

Det kan vara snabbare än group by förutsatt att du har bra indexering..
danjel är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-03, 17:22 #6
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Citat:
Ursprungligen postat av danjel Visa inlägg
Du borde kunna köra något liknande:

select
pid,
(select count(*) from comments where pid=c.pid) as antalet
from comments c
order by antalet desc

Det kan vara snabbare än group by förutsatt att du har bra indexering..
Får samma resultat:
Kod:
40
40
40
40
40
osv....
Känns som jag gör fel?
PHP-kod:
$sql "select 
pid,
(select count(*) from comments where pid=c.pid) as antalet
from comments c
order by antalet desc"
;
while(
$line mysql_fetch_assoc(mysql_query($sql))){
echo 
$line['pid'];
echo 
"<br>";

Är allting rätt när jag skriver ut resultatet?
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-03, 17:59 #7
obes avatar
obe obe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 172
obe obe är inte uppkopplad
Medlem
obes avatar
 
Reg.datum: Dec 2004
Inlägg: 172
select a.*, count(*) as ncomments from artiklar a left join comments c on c.pid=a.pid group by a.pid order by a.pid desc

??
obe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-03, 20:30 #8
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Citat:
Ursprungligen postat av youheardit Visa inlägg
$sql = "select count(pid) as antalet,
pid
from comments
group by pid";
while($line = mysql_fetch_assoc(mysql_query($sql))){
echo $line['pid'];
echo "<br>";
}
?>[/CODE]
pid = postid som i förra posten...

Resultatet blir en oändligt lång lista med samma pid som i första kommentaren...
Kod:
40
40
40
40
40
osv....
har jag gjort fel ? eller är mysql-frågan fel ställd?

tack!
har jag gjort fel? you bet.
Gör du på detta viset så ställer du frågan till databasen om och om igen och visar resultatet för första raden ett oändligt antal gånger.
Den sql-fråga du fått ger det riktiga svaret, OM du ställer frågan rätt till databasen och sen tar reda på svaret och skriver ut det ordentligt.
Pröva med att ställa frågan En(1) gång till databasen, ta hand om resultatet och lista det på ett riktigt sätt:
Citat:
(fråga som ovan)
$result=mysql_query($sql);
while($line = mysql_fetch_assoc($result)){
print_r($line);
echo "<br>";
}
Ser du skillnaden?
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-04, 00:03 #9
obes avatar
obe obe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 172
obe obe är inte uppkopplad
Medlem
obes avatar
 
Reg.datum: Dec 2004
Inlägg: 172
Citat:
Ursprungligen postat av Magnus_A Visa inlägg
har jag gjort fel? you bet.
Gör du på detta viset så ställer du frågan till databasen om och om igen och visar resultatet för första raden ett oändligt antal gånger.
Den sql-fråga du fått ger det riktiga svaret, OM du ställer frågan rätt till databasen och sen tar reda på svaret och skriver ut det ordentligt.
Pröva med att ställa frågan En(1) gång till databasen, ta hand om resultatet och lista det på ett riktigt sätt:

Ser du skillnaden?
Dock är jag ganska övertygad om att mitt sätt är snabbare, dessutom får du även ut artikeldatan i samma fråga
obe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-04, 01:08 #10
Bjorne Bjorne är inte uppkopplad
Flitig postare
 
Reg.datum: Sep 2009
Inlägg: 374
Bjorne Bjorne är inte uppkopplad
Flitig postare
 
Reg.datum: Sep 2009
Inlägg: 374
Ditt sätt är dock felaktigt. Tänk på vad som händer ifall en artikel har 0 kommentarer.
Bjorne är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 19:09.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017