Jag håller på med ett forum och skulle vilja ställa en SQL-fråga som samtidigt som den listar alla ämnen räknar antalet svar på varje ämne. Left join är väl att föredra eftersom postr som saknar svar annars inte kommer med. ;o) Funderade på det med, men vi vet ju inget om hur tabellen är designad eller vilket resultat som önskas. Kanske svar_tillhör är samma som id för de rader är själva roten i en svarskedja, därmed blir ju count=1 då. Kanske vill man inte ha de rader som ej har några svar. om det är asp och ado vi talar om ska det gå att köra multiple recordsets genom att bara slänga in två sqlsatser i din SQL sträng, för att sedan traversera till det andra recordsetet skriver du bara MoveNextRecordset. Frågan har ingenting med datasahping eller flera recordsets att göra. Jag och Andreas har besvarat och utvecklat svaren redan. Eller annan lösning!? Testa Ursäkta om jag uttryckte mig på ett för negativt sätt i svaret, det var ej meningen. Dock anser jag inte att vare sig datashaping eller multipla recordsets är någon lösning på frågan (se nedan), och detta ville jag förklara framförallt för frågeställaren så att han ej blev förvirrad av de motsägelsefulla svaren. Frågan som ställdes var denna:Två select-satser i samma fråga?
Jag har lite för mig att man kan sätta två SELECT-satser i samma fråga, men kommer inte ihåg hur.
Frågan skulle vara ungefär.
SELECT id, ämne, (SELECT COUNT(id) FROM forum WHERE svar_tillhör=id) FROM forum
Där id i "svar_tillhör=id" är id:t i första SELECT-satsen....
Någon som har lösningen?
Eller en annan lösning för att slippa ställa en ny SQL-fråga för varje ämne som räknar antalet svar.Sv: Två select-satser i samma fråga?
<code>
SELECT a.id, a.ämne, b.cnt
FROM forum a
INNER JOIN (SELECT svar_tillhör AS id, COUNT(*) AS cnt FROM forum GROUP BY svar_tillhör) b
ON a.id = b.id
</code>Sv: Två select-satser i samma fråga?
<code>
SELECT a.id, a.ämne, b.cnt
FROM forum a
LEFT JOIN (SELECT svar_tillhör AS id, COUNT(*) AS cnt FROM forum GROUP BY svar_tillhör) b
ON a.id = b.id
</code>
Eventuellt måste du i access spara frågan/vyn:
Namn: qryAntalSvar
<code>
SELECT svar_tillhör AS id, COUNT(*) AS cnt
FROM forum
GROUP BY svar_tillhör
</code>
Och göra Joinen mot frågan/vyn:
<code>
SELECT a.id, a.ämne, b.cnt
FROM forum a LEFT JOIN qryAntalSvar b ON a.id = b.id
</code>Sv: Två select-satser i samma fråga?
Sv: Två select-satser i samma fråga?
Det var länge sen jag använde tekniken och då gjorde jag det i VB samt att jag inte kommer ihåg om det funkade på disconnected recordset, eventuellt behöver man ha kopplingen aktiv...
Men om du inte gillar något av förslagen föreslår jag att du kollar upp teknologin Datashaping med ADO, det är hur smidigt som helst, speciellt när du ska hämta relaterad information som det handlar om i ditt fall...
www.4guysfromrolla.com har en klockren artikelserie om datashaping kolla in den... bara att söka på deras site.
Lycka till, om det inte ordnar sig är det bara att höra av sig igen.Sv: Två select-satser i samma fråga?
Sv: Två select-satser i samma fråga?
Hur tolkar du det? Visst måste väl både DataShaping och Multiple recordset vara en annan lösning, därmed inget sagt om de lösningar både du och Andreas lagt fram, jag vet att era förslag oftast (i princip alltid) är mycket bra.
Dessutom, om killen jobbar med forum kan det vara mycket användbart att känna till datashaping, därför att det förenklar en hel del vid hämtning av relaterat data... forum utv i synerhet har mycket relaterad datainformation.
Dessutom är det väl också så att det är upp till killen att bedöma vad som är svar på hans fråga!? Eller? Som jag ser det är det inte din sak att avgöra.Sv: Två select-satser i samma fråga?
SELECT DISTINCT id, ämne, (SELECT COUNT(id) FROM forum WHERE svar_tillhör=f.id) FROM forum f
/JuhlinSv: Två select-satser i samma fråga?
> Jag håller på med ett forum och skulle vilja ställa en SQL-fråga som samtidigt som den listar alla ämnen räknar antalet svar på varje ämne.
Visst, man kan lösa detta genom att med datashaping returnera ett recordset med samtliga ämnen i, och som en extra kolumn returnerar den ett inre recordset med de svar som finns till varje ämne (dvs ett recordset för varje rad i det första recordset). Sen skulle man kunna räkna antalet rader i varje inre recordset och skriva ut detta tillsammans med övrig info om ett ämne. Visst kan man göra så, och det är kanske en lösning om man ska skriva ut en massa information om varje svar tillsammans med respektive ämne, men för att bara räkna antalet svar till ett ämne är det overkill och dessutom inte i närheten av mitt eller Andreas förlag i prestanda. Det är ju faktiskt precis en sån typ av fråga som databashanteraren är expert på att hantera, på just något av de vis vi presenterade.
Dessutom anser jag att datasahaping är ganska lurigt. Många tror att det är någon form av magi som åstadkommer det resultat av yttre och inre recordsets, medan det i själva verket inte är något annat än att providern kör först en yytre fråga och sedan för varje rad i det yttre resultatet kör en inre fråga. Det är alltså ingen skillnad mot att själv köra en fråga och sedan för varje rad köra en ny fråga.
Vad gäller multipla recordsets så löser det inte frågan bättre än våra förslag, vad skulle de innehålla? Visst, man kan returnera ett recordset med alla ämnen och ett andra med antalet svar för varje ämne, men vad skulle man tjäna på det? Tvärtom blir det mer jobb då man måste se till att matcha raderna i dem mot varandra för varje ämne.