Tråd bedømmelse:
  • 0 Stemmer - 0 Gennemsnit
  • 1
  • 2
  • 3
  • 4
  • 5
MySQL select problem
30-05-2016, 10:50 (Denne besked var sidst ændret: 30-05-2016, 10:52 af s0x.)
#1
MySQL select problem
Hej Shellsec, så er tiden kommet til at igen at spørge de kloge hjerner til råds, hvor de mindre kloge må give op..
Jeg har et MySQL loop som virkelig volder mig problemer i disse dage. Problemet lyder henholdsvist på at jeg i en tabel skal have et specifikt type id til at blive vist sidst.
Grunden til dette, er at jeg bruger et ældgammelt system, som ikke er optimeret for den nye PHP mysqli-version, og derfor skal rette hele lortet til nyeste setup (det har taget evigheder), og i den forbindelse breaker den et loop, når et specifikt type-id bliver gennemkørt.

Selve tabellen lyder således;

Kode:
table.categories{
id : INT
data : STR
type : INT 1-8
}

Problemet opstår når et givent id med 4 bliver gennemkørt i loopet, men forsvinder så snart jeg springer id'et 4 over.
Selvfølgelig ville den mest optimale løsning være at omskrive det hele, men scriptet er så komplekst og voldgammelt at jeg simpelthen er for doven.
Er der nogen måde at få IDet '4' til at blive gennemkørt sidst i min query, uden at skulle bøvle alt for meget med det?

Query som den ser ud nu:
Kode:
"SELECT <kolonner> FROM db.categories WHERE type <> 4 LIMIT 200"


Dette fixer 99% problemet, men er jo ikke holdbart i længden, da kategorien med IDet 4 ikke bliver vist.

Jeres guidance er højt værdsat.
...trolling nets since 2013
Find alle beskeder fra denne bruger
Citer denne besked i et svar
31-05-2016, 05:40
#2
RE: MySQL select problem
Du kan eventuelt prøve
Kode:
SELECT * FROM db.categories WHERE type <> 4 UNION
SELECT * FROM db.categories WHERE type = 4

Hvis du vil sortere 4 nederst kan det godt give lidt bøvl med limits, men du kan stadig lave dem ved at pakke det hele ind.
Kode:
SELECT * FROM (
    SELECT * FROM db.categories WHERE type <> 4 UNION
    SELECT * FROM db.categories WHERE type = 4
) LIMIT 200;

Jeg har ikke lige prøvet det, men jeg tror at unions er den nemmeste udvej når nu 4 ikke er hverken den højeste eller lavest mulige værdi.
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
31-05-2016, 07:22
#3
RE: MySQL select problem
(31-05-2016, 05:40)Doctor Blue Skrev: Du kan eventuelt prøve
Kode:
SELECT * FROM db.categories WHERE type <> 4 UNION
SELECT * FROM db.categories WHERE type = 4

Hvis du vil sortere 4 nederst kan det godt give lidt bøvl med limits, men du kan stadig lave dem ved at pakke det hele ind.
Kode:
SELECT * FROM (
   SELECT * FROM db.categories WHERE type <> 4 UNION
   SELECT * FROM db.categories WHERE type = 4
) LIMIT 200;

Jeg har ikke lige prøvet det, men jeg tror at unions er den nemmeste udvej når nu 4 ikke er hverken den højeste eller lavest mulige værdi.

Det virkede som en god løsning, men det lader ikke til at php vil lade mig fyre det af...
Jeg prøver at kigge på det efter arbejde, det burde jo være muligt med unions...
...trolling nets since 2013
Find alle beskeder fra denne bruger
Citer denne besked i et svar
31-05-2016, 15:50 (Denne besked var sidst ændret: 31-05-2016, 15:54 af s0x.)
#4
RE: MySQL select problem
(31-05-2016, 11:29)BigJ Skrev: Hvad er Fordelen ved "<>" fremfor "!="? Så vidt jeg kan læse, gør de det samme :)

Der er ingen fordele, tror bare det er defineret således fordi jeg startede med kun > :P

Edit; Dit hotfix virker forresten ikke @DoctorBlue :(
...trolling nets since 2013
Find alle beskeder fra denne bruger
Citer denne besked i et svar
31-05-2016, 21:11
#5
RE: MySQL select problem
(31-05-2016, 15:50)s0x Skrev: Der er ingen fordele, tror bare det er defineret således fordi jeg startede med kun > :P

Edit; Dit hotfix virker forresten ikke @DoctorBlue :(

Æv. Hvad hvis du bare laver dem i to queries og sætter de resulterende arrays sammen?
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
« Ældre | Nyere »




User(s) browsing this thread: 1 Gæst(er)