Okay, sæt dig godt på stolen så du ikke falder ned, når du ser det sql der nu:
$query = // Skal indeholde det brugeren har indtastet $res = mysql_query(" SET @priority = 0; SELECT titel, @priority AS priority FROM artikler WHERE CASE WHEN (titel LIKE '%".$query."%' AND tekst LIKE '%".$query."%') THEN @priority := 1 WHEN (titel LIKE '%".$query."%' AND tekst NOT LIKE '%".$query."%') THEN @priority := 2 WHEN (tekst LIKE '%".$query."%' AND titel NOT LIKE '%".$query."%') THEN @priority := 3 ELSE @priority := 0 END ORDER BY @priority "); // Det fundne data løbes igennem med en alm. while.
@priority er en variabel i query'en. Den defineres i SET-delen.
I WHERE-delen har jeg benyttet en CASE. Den svarer til switch kontrolstrukturen som du kender i php. Findes søgeordet både i titel og tekst sættes @priority til 1, indgår søgeordet kun i titlen sættes @priority til 2, og endelig sættes @priority til 3 hvis søgeordet kun indgår i teksten.
Til sidst sorteres de fundne artikler efter @priority, så de kommer ud i den rigtige rækkefølge.
hmmm ... den kan ikke rigtigt lide den... :S... du får den lige:
Kunne ikke udføre: SET @priority = 0; SELECT navndk, @priority AS priority FROM Produkter WHERE CASE WHEN (navntdk LIKE '%hummel%' AND textdk LIKE '%hummel%') THEN @priority := 1 WHEN (navndk LIKE '%hummel%' AND textdk NOT LIKE '%hummel%') THEN @priority := 2 WHEN (navndk LIKE '%hummel%' AND textdk NOT LIKE '%hummel%') THEN @priority := 3 ELSE @priority := 0 END ORDER BY @priority Fejlen er: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; SELECT navndk, @priority AS prio' at line 2
Okay, jeg havde kun testet den i et mysql admin tool. Følgende burde virke:
$query = "hummel"; mysql_query("SET @priority = 0"); $res = mysql_query(" SELECT navndk, @priority AS priority FROM artikler WHERE CASE WHEN (navndk LIKE '%".$query."%' AND textdk LIKE '%".$query."%') THEN @priority := 1 WHEN (navndk LIKE '%".$query."%' AND textdk NOT LIKE '%".$query."%') THEN @priority := 2 WHEN (textdk LIKE '%".$query."%' AND navndk NOT LIKE '%".$query."%') THEN @priority := 3 ELSE @priority := 0 END ORDER BY @priority ");
Selve SET-delen skal tilesyneladende, når den kører igennem php, skilles ud sin egen mysql_query.
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.