I tabel 1 skal personid være primær nøgle I tabel 2 bør du udvide med en primærnøgle (et autonummereret felt er fint her), og gøre personid til et index.
OK. Det kan godt være at det er det smarteste. Men selvom jeg tilføjer et logID her, har jeg stadig probs med at få det rigtige hentet.
I virkeligheden ville jeg gerne kunne hente fx. de sidste 3 logs fra hver person, sådan at man kunne få listet: | navn1 | dato, tid | dato, tid | dato, tid | | navn2 | dato, tid | dato, tid | dato, tid |
Det jeg hidtil har gjort er at benytte php til at samle flere kald, men er i tvivl om det er det hurtigste....
Den anden måde, som jeg egentlig spørger om her, har jeg tidligere brugt en MAX() til, men er det egentlig hurtigst?
Ja, du bør joine i MySql-en, men den eneste måde du kan gøre det er så du får alle datoer for alle personer. Og det er jo lidt usmart. Det er også usmart at tage personerne én for én og så lave en SELECT med LIMIT 3.
OK. - Nu har jeg selv fundet en løsning: SELECT person.*, logged.* FROM person, logged WHERE person.personID = logged.personID GROUP BY person.personID ORDER BY logged.dato
Denne løser mit umiddelbare problem, og henter alle personerne sorteret efter deres sidste logon(dato).
mht. DATETIME, skal de kun sorteres efter dato, tiden er irrellevant i den forbindelse, det er derfor jeg har lavet den som 2 kolonner..
Ja, det overvejer jeg også, men det bryder lidt med normaliseringsreglerne, ikke?
Jeg tror at jeg undlader de 2 andre datoer og nøjes med den sidste.
Erik, du siger at det kræver mere plads og tid at have en kombineret primærnøgle. Vil det sige at det generelt - rent effektivitetsmæssigt - er bedre at have én primærnøgle og så tjekke for dubletter i php'en?
Hvis du skal checke for dubletter skal man overveje et index på det der skal checkes for. Men du søger da ikke efter dubletter på id,dato og tid?
Joh, det er nok ikke så kønt, mit forslag. Alternativet er jo at have en tabel ved siden af, hvor du indsætter den nye dato, og så sletter den ældste så der altid er 3. Det generaliserer nemmere, men er knap så effektivt.
Jeg tjekker ikke på dubletter egentlig, men den samme person kan ikke være logget på samtidig, så den er ihvertfald unik, så tænkte jeg bare at spare en kolonne og lavede istedet de 3 kombinerede. Troede egentlig ikke at de var langtsomme....
Jeg tror at den smarteste måde at hente de tre på er ved at lave "joinet" i PHP'en. På den måde undgås nok alt for unødigt komplicerede løsninger.... - spørgsmålet er bare om det er væsentligt langtsommere på den måde (ved at det er den forkerte kategori til PHP-spørgsmål).
Hvis du aldrig rydder op i dine data, vil din join, og dit gennemløb af resultatet blive langsommere med tiden. Derfor kan det jo godt være hurtigt nok i dag.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.