Jag undrar lite över hur man kan räkna ut hur många kommentarer det finns till en nyhet.
Jag listar alla nyheter på första sidan och där ska man se hur många kommentarer nyheten har.
Jag har byggt upp databasen så att det är en tabell för nyheterna och en annan tabell för kommentarerna. Tabellen med kommentarerna har en kolumn som heter newsID där id:et för nyheten är och på så sätt ska jag koppla ihop så att rätt kommentar är till rätt nyhet.
Jag använder mig av access. Jag undrar lite över hur man ska fixa det ifall det går att fixa i sql kopplingen när man hämtar inläggen. Fast det kanske inte går, men vet någon hur man kan göra?
Så här ser min sql-fråga ut som jag har nu, men den hämtar bara alla nyheter.
public DataSet GetEntrys()
{
try
{
string strSQL = "SELECT * FROM tbl_news ORDER BY nID DESC";
return GetNewDataSet(strSQL);
}
catch (Exception)
{
throw;
}
}
Går det på nått sätt göra en sql-fråga där man innerjoinar tbl_news_comments i frågan sedan räknar man antalet poster där kolumnen newsID stämmer överens med nyhetes ID.
Jag är inte så jätte vass på sql-frågor, så jag vet inte riktigt hur man ska göra den frågan, om det äns går.
Jag gör följande på min hemsida för att plocka ut nyhetsid, rubrik, datum, innehåll, skribentid, skribentnamn och antal kommentarer från de 10 senaste nyheterna:
"select n.nid, n.nHeadline, n.ndate, n.ncontent, u.uuserid, u.uname, count(c.cid) as comments from tblalternianews n left join tblalterniausers u on (n.nwriterid=u.uUserid) left join tblalterniacomments c on (c.cNewsId=n.nid) group by n.nid order by n.nid desc LIMIT 10"
där n. = alias för nyhetstabellen, u. = alias för användartabellen och till sist c. = alias för kommenteringstabellen.
Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'nHeadline'.
Kod:
string strSQL = "SELECT tbl_news.nID, tbl_news.nHeadline, tbl_news.nContent, COUNT(tbl_news_comments.cnID) AS tbl_news_comments FROM tbl_news LEFT JOIN tbl_news_comments ON (tbl_news_comments.cnID = tbl_news.nID) GROUP BY tbl_news.nID ORDER BY tbl_news.nID desc";
Vad kan det bero på?
Hur gör man för att dela upp frågan på flera rader?
Sedan undrar jag vad man ska skriva för att få ut hur många kommentarer det är på aspx-sidan. Lägger sig resultatet av Count i någon speciellsträng?
Använd _aldrig_ select *, men din renskrivning visar iaf syftet med sql-satsen tydligare.
Varför inte? :q
Antag att du modifierar tabellen genom att, säg, lägga till en kolumn och att denna kolumn inte är av intresse i SQL-frågan. Då måste du ersätta '*' med endast de önskade kolumnerna, vilket kan bli en hel del (framför allt om tabellen är onormaliserad). Dessutom kanske ändringarna måste göras på flera ställen.
Använd _aldrig_ select *, men din renskrivning visar iaf syftet med sql-satsen tydligare.
Varför inte? :q
Antag att du modifierar tabellen genom att, säg, lägga till en kolumn och att denna kolumn inte är av intresse i SQL-frågan. Då måste du ersätta '*' med endast de önskade kolumnerna, vilket kan bli en hel del (framför allt om tabellen är onormaliserad). Dessutom kanske ändringarna måste göras på flera ställen.
Det är sant, det jag reagerade på var att man Alldrig ska använda sig utav det. Alltså är det en smaksak ;)
select n.nid, n.nheadline, n.ncontent, iif(c.total is null, 0, c.total) as comments
from tbl_news n
left join (select cnid, count(*) as total
from tbl_news_comments
group by cnid) as c
on n.nid = c.cnid;