Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
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.