30. september 2010 - 09:59Der er
6 kommentarer og 2 løsninger
Test af forekomst - uden at hente data frem ?
Jeg vil teste om der er oprettet nogen rækker med et bestemt iD. - men ikke hente disse, kun se om der ER nogen.
Enten er der ikke nogen, og så kan min kode fortsætte, eller også er der en hulens masse, og i så fald skal brugerens advares..
Jeg har altså ikke i sinde at hente nogen af rækkerne, kun oplysningen om at de findes.
Min bekymring er at databasen sætter det helt store maskineri igang... - hvordan kan jeg undgå det ?
Intet dataudtræk specificeret: SELECT count(iD) FROM history WHERE iD=123 eller måske et begrænset udtræk: SELECT iD FROM history WHERE iD=123 LIMIT 1 eller noget helt tredie ?
Du kan jo ikke lave et tjek i db, uden en qquery ?
Selv ville jeg foretrække den sidste med LIMIT 1
I hvilken forbindelse skal det tjekkes ?
Synes godt om
Slettet bruger
30. september 2010 - 11:22#3
#1: Det ser ikke ud til at man kan udføre exists() direkte, kun på en sub-query: SELECT EXISTS(SELECT iD FROM history WHERE iD=123) - og så er jeg jo (næsten) lige vidt... - med mindre den bruger "short-circuit", og returnerer true ved første forekomst. I så fald svarer det vel til LIMIT=1
#2: Brugeren er ved at ændre sin "profil-type" og skal advares om at det betyder at hun mister sin "history", men kun hvis hun HAR en history (og ikke er en helt ny bruger)
Det ER ikke det helt store problem, bare en "principiel tvivl" om man kan teste for eksistensen af data, uden at databasen gør sig klar til at levere dem...
Exists() er naturligvis optimeret til netop den slags forespørgsler, og laver mindst muligt arbejde. Det er muligt de andre queries bliver ændret af query optimizeren (hvis der er en sådan i mysql). Exists skulle være den optimale metode til at checke om der findes data.
Synes godt om
Slettet bruger
30. september 2010 - 12:32#5
Oki doke. Dén bruger jeg så : ) - smid et "svar" så du kan få din bekomst.
Har allerede smidt et svar, men laver da gerne et til :-)
Synes godt om
Slettet bruger
15. oktober 2010 - 11:38#8
Det havde du også, sorry : )
Synes godt om
Ny brugerNybegynder
Din løsning...
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.