CatZMedlem sedan jan. 20022 440 inlägg set objRS = objConn.execute( " select t_wars.*, " _
& " t_wars_soldiers.*, " _
& " t_soldiers.soldier_nick " _
& " from t_wars, t_wars_soldiers, t_soldiers "_
& " where t_wars.war_id = t_wars_soldiers.war_id "_
& " and t_wars_soldiers.soldier_id = t_soldiers.soldier_id " )
Jag har studerat LarsG's exellenta inlägg och sitter här och testar lite olika saker för skojs skull. När jag försöker skriva ut t_soldiers.soldier_nick så får jag upp ett felmeddelande om:
ADODB.Recordset fel '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
/wars.asp, line 11
På koden:
do while not objRS.eof
response.write objRS("t_wars.war_id") & "<br>"
response.write objRS("t_wars_soldiers.soldier_id") & "<br>"
objRS.movenext
loop
Tänker jag helt tokigt eller ?
Engine^Medlem sedan dec. 20003 887 inlägg Tänkte du göra den som en JOIN istället?
SELECT t_wars.*, t_wars_soldiers.*, t_soldiers.soldier_nick AS s_nick
FROM t_wars INNER JOIN t_wars_soldiers ON t_wars.war_id = t_wars_soldiers.war_id
WHERE t_wars_soldiers.soldier_id = t_soldiers.soldier_id;
/r Du kan ju givetvis fortsätta och göra en INNER JOIN på t_soldiers också istället för att använda WHERE som jag gjorde, men jag gillar WHERE :)
Det där är väl en lustig blandning, men den borde fungera... skrev nämligen en nästan identisk för eget bruk och den fungerar lysande.
Jag tycker iofs att det du redan hade borde ha fungerat, men så är ju jag ingen expert heller ;)
LarsGMedlem sedan dec. 200012 464 inlägg Jo, du kan inte ange tabellnamnet i detta sammanhang. Om du har flera kolumner med samma namn så kan du döpa om dom i select-satsen.
select t1.c1 as c1_1, t2.c1 as c1_2 from t1,t2
Engine^Medlem sedan dec. 20003 887 inlägg LarsG: när ska man använda sig av alias istället? Jag tycker att det är olika mellan snarlika typer av join-frågor. Tänker på dom jag använder själv...
Man skulle ha gått en kraschkurs i SQL innan man började jobba med det :) Fast inlärningskurvan är ju skoj...
LarsGMedlem sedan dec. 200012 464 inlägg Dels i detta fall och dels om man använder ett uttryck
select c1 + c2 as colSum from t
Om man inte har med as så blir det inget namn. Det går att få fram i ADO med hjälp av ett ordningsnummer
response.write rs(0)
men det blir mer lättläst kod om man har ett namn. Det blir också säkrare för att det fortsätter att fungera om man lägger till fler kolumner i select-listan.
Engine^Medlem sedan dec. 20003 887 inlägg Aha, ok, det är jag som har blandat lite ordningsnummer och alias i min kod... då är jag på det klara med den biten ivarjefall :)
Tack.
CatZMedlem sedan jan. 20022 440 inlägg Med massa hjälp från LarsG (som vanligt) har jag gjort följande slutsats. Eftersom jag specificerat soldiers.soldier_nick i koden jag postade anropar jag detta med objRS("soldier_nick") däremot war_id som finns med i 2 av tabellerna måste jag då anropa med objRS("tabell.kolumn") eller ge ett speciellt namn i min sql query.
Jag vet ju redan villket som är god programmering och inte. så följdfrågan blir då. Finns det en oerhörd prestanda vinst att tjäna på att ange tabell.kolumn AS värde?
För man tjänar ju många rader kod genom att göra på "mitt" sätt.
/RED de rader man tjänar tjänar man ju på att inte behöva specificera alla fält man tar med i sql queryn utan bara väljer allt.