tantenMedlem sedan nov. 20051 596 inlägg Jag har en fråga som bara ska skrivas ut om resultat inte finns.
SELECT s. * , b.namn, stad, l. * , k.enamn, fnamn, h.namn, t. *
FROM starta s
JOIN lopp l ON s.loppID = l.loppID
JOIN bana b ON l.banID = b.banID
JOIN kusk k ON s.kuskID = k.kuskID
JOIN hest h ON s.stallID = h.stallID
JOIN lopptyp t ON l.typID = l.typID
WHERE s.loppID = l.loppID
ORDER BY l.datum DESC
Jag vill sortera ut de aktuella loppen innan denna fråga körs.
Vad som ska skrivas ut som exempel är:
Nästa start: Örebro 4/2.
Lopp:2 Nummer:8 Brunte, 2140v. Kusk: Kalle Stropp
Så tanken är att så fort resultatet från detta lopp kommer in så ska ingenting skrivas ut.
aktuell tabell är resultat som inte finns med i frågan nu och loppID är gemensam nyckel för starta, lopp och resultat.
Ska få in också att om kuskID = 1 så ska inte kusk skrivas ut.
Någon som vill hjälpa mig att optimera frågan?
Peter SMedlem sedan dec. 20025 483 inlägg Vilket DBMS?
SELECT s. * , b.namn, stad, l. * , k.enamn, fnamn, h.namn, t. *
FROM starta s
JOIN lopp l ON s.loppID = l.loppID
JOIN bana b ON l.banID = b.banID
JOIN kusk k ON s.kuskID = k.kuskID
JOIN hest h ON s.stallID = h.stallID
JOIN lopptyp t ON l.typID = l.typID
WHERE s.loppID = l.loppID
AND l.loppID NOT IN
( SELECT loppID
from resultat )
ORDER BY l.datum DESC
För kuskID-villkoret lägger du bara till AND k.kuskID <> 1.
tantenMedlem sedan nov. 20051 596 inlägg MySql 4.0 :-(
Så din fråga gick inte att köra, blev fel efter not in
...syntax to use near 'SELECT loppID from resultat ) ORDER BY l . datum DESC
tantenMedlem sedan nov. 20051 596 inlägg Men kuskID fungerade när jag lade in den på rätt ställe... :)
Peter SMedlem sedan dec. 20025 483 inlägg SELECT s. * , b.namn, stad, l. * , k.enamn, fnamn, h.namn, t. *
FROM starta s
JOIN lopp l ON s.loppID = l.loppID
JOIN bana b ON l.banID = b.banID
JOIN kusk k ON s.kuskID = k.kuskID
JOIN hest h ON s.stallID = h.stallID
JOIN lopptyp t ON l.typID = l.typID
LEFT JOIN resultat r ON l.loppID = r.loppID
WHERE r.loppID is null
ORDER BY l.datum DESC
+ ev. kuskID då.
tantenMedlem sedan nov. 20051 596 inlägg Tack Peter S nu blev det rätt. :bire
Men är detta det snabbaste sättet att hämta raderna på?
Nu finns det bara drygt runt 100 rader att sortera, men om några år kan det ju finnas betydligt fler...
Med den inre frågan som du skrev först så hämtas den väl först och sedan hämtas kusk och hästnamn osv för de rader som är aktuella.
Men nu är det väl tvärtom, att nästan hela databasen hämtas innan de två rader som är aktuella i dag skrivs ut? ;)
Bara en undran i fall man ska göra något liknande i en mycket större databas.
Såg att jag skrivit fel på raden med lopptyp
Peter SMedlem sedan dec. 20025 483 inlägg Hur ett DBMS väljer att joina, sortera och hämta poster är svårt att säga. Att joina flera tabeller kanske kan bli krävande i takt med att storleken på dem ökar. För att optimera sökningarna väljer vissa att reducera antalet tabeller, på bekostnad av redundans och semantik. Andra optimeringssätt inkluderar att skapa index på kolumner som används i villkorssatser. Exakt hur och vilka detta gäller får man nog prova sig fram med. Kandidater brukar kunna vara primärnycklar och främmande nycklar.
Mer och bättre information bör wF:s databasgurus kunna ge. :)