webForumDet fria alternativet

SQL-problem

6 svar · 140 visningar · startad av i-or

i-orMedlem sedan nov. 2001308 inlägg
#1

Just nu ser mitt SQL-uttryck ut som följer:

SELECT Name, Country, Time, Place, Venue, Date FROM 2001 ORDER BY Time

Detta listar alla de bästa resultaten som är gjorda på 800m det här året. Jag vill däremot bara ha med ett resultat för varje löpare. "DISTINCT bara för Name" om ni fattar vad jag menar.

Jag har därför löst på detta långsökta sätt.

SELECT DISTINCT Name FROM 2001

Alla postar från det andra SQL-uttrycket sparar jag tillfälligt i en tabell i databasen.

När sedan första selectuttrycket körs kollar den om namnet finns i den tillfälliga tabellen, om den gör det skriver den ut posten samt raderar namnet i den tillfälliga tabellen så att nästa gång namnet dyker upp så skrivs inte en ny post ut.

Även om detta inte tar så lång tid på min egen burk, antar jag att det är prestationskrävande på nätet, när tabeller öppnas, info läggs dit, info tas bort osv. Samtidigt finns det en risk att två försöker gå in på sidan samtidigt och då skiter sig den tillfälliga tabellen.

Kan jag lösa detta på ett enklare sätt (med bara 1 SQL-uttryck)?

Tack på förhand

spangoMedlem sedan juni 20006 147 inlägg
#2
SELECT Name, Country, Time, Place, Venue, Date FROM 2001 outer_2001 WHERE Time in (SELECT MIN(t.Time) FROM 2001 inner_2001 WHERE inner_2001.Name = outer_2001.Name) ORDER BY Time

Men du, det är väl inte så att du har en tabell för varje år (dvs en för 2000, en för 2001 et.c.)?

------------------
You can be a coward for a few minutes, or dead forever. /Rincewind

LarsGMedlem sedan dec. 200012 465 inlägg
#3

Om samma löpare har flera resultat under ett år, vilket resultat vill du ha då.
Det bästa eller vilket som helst?

Om du vill ha bästa så kan du göra så här

select distinct  name,country,time,place,venue,date 
from "2001" as p
where time ( select min(time)
from "2001" where name = p.name )

Ovanstående fungerar inte i alla DBMS, (mysql/access t.ex.)

Varför har du en tabell som heter 2001, det brukar bara ställa till problem med sådana namn i sql.

Har du en tabell för varje år? Jag skulle lägga allt i en tabell. Då du har ett datum med så kan du få fram vilket år det är med hjälp av det värdet.

------------------
essentitia preter non sans multiplicandum

i-orMedlem sedan nov. 2001308 inlägg
#4

Tack så mycket, har dock inte hunnit prova om jag får det att funka än.

Jag kommer att ha en databas för varje år. Eftersom jag inte har behov av att sammankoppla olika års resultat, spelar väl det ingen roll? Med fler databaser får man bättre ordning och inte kollosallt stora tabeller.

På vilket sätt kan siffror som tabellnamn inte fungera?

LarsGMedlem sedan dec. 200012 465 inlägg
#5

Om du skriver

select * from 2001

så får du syntaxfel.

Databashanterare är gjorda för att hantera stora datamängder. En fördubbling av antalet poster innebär inte en födubbling av söktiden. (Förutsatt att du har vettiga index, vilket du behöver i alla fall.)

------------------
essentitia preter non sans multiplicandum

i-orMedlem sedan nov. 2001308 inlägg
#6

Intressant det där med att söktiden inte har någon betydelse. Men främsta motivet var att själva databasen inte tar så stor plats. Jag vill uppdatera sidan offline och då måste jag ladda upp databasen varje gång jag ska uppdatera (iofs har jag inte lagt upp sidan än).

Kan du specifiera "vettiga" index lite grann? Är det bara att man inte ska ta med kolumner som man inte använder? För det har jag hört att man ska vara noga med. Har de jag har hört det ifrån fel eller gäller din tes att "datamängden inte förlänger söktiden" bara när det gäller antal poster och inte när det gäller antal kolumner?

Tack så mycket för din hjälp

PS. Jag fick skriptet att fungera.

REDIGERING: Upptäckte att jag tolkade det du sa, felaktigt eller inte vet jag inte. Du sa aldrig att "datamängden inte förlänger söktiden".

[Redigerat av i-or den 05 dec 2001]

spangoMedlem sedan juni 20006 147 inlägg
#7

Kan du specifiera "vettiga" index lite grann? Är det bara att man inte ska ta med kolumner som man inte använder?

Man ska indexera de tabeller man söker i mycket. Det blir något långsammare att lägga in nya poster men det övervinns av att sökningen blir betydligt snabbare, plus att man oftast söker efter data oftare än man stoppar in ny (naturligtvis beror detta på vad databasen används till, men i de flesta fall stämmer det).

Har de jag har hört det ifrån fel eller gäller din tes att "datamängden inte förlänger söktiden" bara när det gäller antal poster och inte när det gäller antal kolumner?

Antalet kolumner i tabellen spelar absolut ingen roll (eller borde iaf inte göra det...), men naturligtvis tar det längre tid (om än inte vidare mycket) om man i sökvillkoren använder femton olika kolumner än bara en.

------------------
You can be a coward for a few minutes, or dead forever. /Rincewind

Genererad på 518 ms · cache AV · v20260730165559-full.f96bc7eb