12. oktober 2004 - 16:23Der er
13 kommentarer og 1 løsning
MySQL: hent placering af post i recordset
Hej Når jeg foretager en søgning i min MySQL får jeg leveret en række resultater i et recordset som jeg kan udskrive, bladre i etc. jeg har brug for at kende placeringen på en given post i dette recordset.
Eksempel på recordset efter at have søgt på '%juice' : bananjuice æblejuice jordbærjuice kattejuice
Kan MySQL nemt fortælle mig at jordbærjuice har placering 3?
Min liste over Juice indeholder 100.000 forskellige varianter så det er ikke så fedt at køre dem alle igennem i ASP for at finde placeringen på jordbærjuice
legende.dk => dette er vist ikke så smart hvis vi forestiller os at der er temmelig mange poster den skal håndtere. Så må det alt andet end lige være smartere hvis MySQL kan levere varen fra starten af :)
Majkat => Det er sikkert smart, men jeg forstår ikke helt hvad der sker. Følger der en forklaring? :D
Ah nu begynder det at give mening. Det dækker dog ikke umiddelbart mit behov. Jeg har vist ikke forklaret mig godt nok.
Jeg ønsker ikke at finde placeringen på alle poster, men blot dykke ned og hive en enkelt placering ud. Forestil dig jeg siger: kære MySQL, stik mig lige position på jordbærjuice!
legende.dk => jeg ønsker at finde nummeret i et recordset så dit forslag funktionelt, men jeg mener bare ikke det er en optimal løsning idet den ikke er egnet til at håndtere store datamængder :)
Det du vil giver ingen mening i database-sammenhæng. SQL er baseret på sætteori, og der ved du per definition ikke hvor i tabellen dine data ligger -- bare at de er der, og kan findes frem igen.
F.eks. kan en SQL database fint finde på at indsætte en række før din "jordbærjuice" række, hvorefter positionen ikke længere er korrekt -- eller hvis du selv sletter en række, så passer positionen jo heller ikke længere.
Hvis du vil have en unikt tal for hver række i din tabel skal du lave en ID kolonne, f.eks.
ALTER TABLE tabel ADD ID INT UNSIGNED NOT NULL AUTO_INCREMENT
- så vil du herefter altid have unikke tal for hver række i din tabel.
Hej igen Det er ikke id på tabellen jeg ønsker! Det er placeringen i mit recordset. Dit første forslag var ret godt idet det gav mig placeringerne på alle poster i mit recordset. Jeg ønsker dog muligheden for plukke en af placeringerne udfra det id (her jordbærjuice) jeg kender. dvs. jeg får et dataudtræk der består af en hel stribe poster sorteret i en eller anden rækkefølge. De har alle en placering i mit recordset - 1,2,3,4,5 osv. Jeg ved at en af mine poster indeholder jordbærjuice (og der er kun den ene der gør det). Jeg ønsker således at få at vide hvilken placering denne post har i mit recordset, uden at skulle loope hele recordsettet igennem og kigge alle poster igennem.
Bemærk at uanset at alt dette foregår inde i serveren er det helt horribelt i optimerings-øjemed. Men jeg kan ikke lige se andre løsninger (og det er stadigæk bedre end at trække alt ud til et andet program, konvertere til Array/Recordset eller hvad ved jeg)
Hej igen Måske du lige kan svare på endnu et spg. Jeg har kigget på din løsning: SET @c=0
CREATE TEMPORARY TABLE t SELECT *, @c:=@c+1 AS rownum FROM tabel
SELECT * FROM t WHERE type='æblejuice'
DROP TEMPORARY TABLE t
...men kan ikke helt se hvordan tabellen t bliver anvendt. Jeg går ud fra at søgeresultatet bliver smidt over i tabellen t - men hvor sker det i koden? Mangler der ikke noget?
Så meget for at forsøge at gøre noget for læsbarheden :-)
Du skal læse
CREATE TEMPORARY TABLE t SELECT *, @c:=@c+1 AS rownum FROM tabel
som:
CREATE TEMPORARY TABLE t SELECT *, @c:=@c+1 AS rownum FROM tabel
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.