12. september 2005 - 21:29Der er
13 kommentarer og 2 løsninger
En lidt svær sortering med mysql
Hej...
Jeg har et webshop system kørende, hvor hver vare kan tildeles 3 forskellige kategorier. Men jeg vil også gerne tilføje en sorterings funktion, så man kan administrer i hvilken rækkefølge varene står. Dette ville jo være nem nok at lave hvis det bare var en kategori, så kunne man jo bare lave et sorterings felt. Men det er her mit problem er. Jeg har jo 3 kategorier, og derfor skal jeg jo også have 3 felter med sortering. Min tabel ser sådan her ud: navn - kategori1 - kategori2 - kategori3 - sort1 - sort2 - sort3
Det jeg ønsker at få fremstilt er en kode som kan klare denne sortering. Det er nemlig ikke altid at de forskellige vare står i den samme kategori nummer (kategori1, kategori2 og kategori3), så derfor skal sortering tage højde for hvilken kategori den vare er i...
Så det jeg gerne vil have formuleret i en mysql forespørgsel er:
SORT BY (hvis $_GET[vid] er lig kategori1 så sortere den efter sort1 ASC) OR (hvis $_GET[vid] er lig kategori2 så sortere den efter sort2 ASC) OR (hvis $_GET[vid] er lig kategori3 så sortere den efter sort3 ASC)
Med version 7 af TeamShare tager Lector næste skridt og bygger en platform for AI-agenter, der i højere grad kan følge medarbejderen gennem hele arbejdsprocessen.
Prøv at lave et stort statement med nogle UNIONs, a la denne:
$sql = " (SELECT * FROM tabel WHERE kategori1 = '$_GET[vid]' ORDER BY sort1) UNION (SELECT * FROM tabel WHERE kategori2 = '$_GET[vid]' ORDER BY sort2) (SELECT * FROM tabel WHERE kategori3 = '$_GET[vid]' ORDER BY sort3) ";
SELECT * FROM ( (SELECT *, sort1 AS sort WHERE kategori1 = $_GET[vid]) UNION (SELECT *, sort2 AS sort WHERE kategori2 = $_GET[vid]) UNION (SELECT *, sort3 AS sort WHERE kategori3 = $_GET[vid]) ) ORDER BY sort ASC
en limit? mener du at hvis jeg tilføjer en limit til hver så kan det virke? fordi det næste jeg skal lave er en sideskift funktion så ville ikke gøre noget hvis det skal med...
nielle.. du kan ikke lave den der... Da nogen af de varer som ligger i tabellen er i er gemt i kategori1, andre i kategori2 og andre i kategori3... så det skal være alle den viser men laver en samlet sortering..
Hvad mener du egentlig med at den f.eks. ligger i kategori1? Kategori1 er jo et felt i din tabel, og der kan der jo stå en værdi (som formentlig er et id i din tabel af kategorier). Men der kan jo også stå en værdi i kategori2 og ...3.
ja... hvis nu vi antager at den kategoriID vi arbejder med lige nu er 25, så kan 25 stå i enten kategori1, kategori2 eller kategori3. Det står nødvændigvis ikke i samme kategorifeltnummer, derfor denne sortering er lidt svært...
Umiddelbart ville jeg mene at 12/09-2005 21:45:34 netop gør dette. Men, kan du ikke give os nogle simple eksempler sådan at det bliver mere klart hvad du vil have ud?
(SELECT *, sort1 AS sort WHERE kategori1 = $_GET[vid]) UNION (SELECT *, sort2 AS sort WHERE kategori2 = $_GET[vid]) UNION (SELECT *, sort3 AS sort WHERE kategori3 = $_GET[vid]) ) ORDER BY sort ASC
Denne query gjorde det jeg gerne ville, så det er bare perfekt.. Jeg synes nielle og coderdk skal ligge et svar så i kan få point..
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.