webForumDet fria alternativet

Lite problem med en query

Databaser & SQL

5 svar · 385 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Vad är det för problem med följande query:

SELECT id, name, added, category, search_text, confirmed 
	FROM images 
		WHERE search_text LIKE '%jul%' OR 
		search_text LIKE '%winter%' OR 
		search_text LIKE '%santa%' OR 
		search_text LIKE '%christmas%'  
		AND confirmed = 0 
	ORDER BY added/category DESC

..tydligen så verkar den "hoppa över" confirmed = 0.

Det jag försöker göra, är att visa alla bilder som innehåller något av orden ovan (jul, winter, santa, christmas), och som väntar på godkännande.

Medlem sedan nov. 20014 054 inlägg
#2

Ändra till:

SELECT id, name, added, category, search_text, confirmed 
	FROM images 
		WHERE (search_text LIKE '%jul%' OR 
		search_text LIKE '%winter%' OR 
		search_text LIKE '%santa%' OR 
		search_text LIKE '%christmas%')  
		AND confirmed = 0 
	ORDER BY added/category DESC

Dvs att, where (det inom) and confirmed = 0 , skall vara sant. Tror jag funkar bättre.

Medlem sedan juli 20041 271 inlägg
#3

Nu fungerar det bättre.
Tack för det snabba svaret. :e

Jag funderar på att lägga alla sökord i en array istället, men hur löser jag det då? :r

Medlem sedan juli 20041 271 inlägg
#4

Hur löser jag det på samma sätt som ovan, fast då med en array?

$ord = array("jul", "winter", "vinter", "santa", "christmas"); 
$ord = implode(", ", $ord);
Medlem sedan feb. 20034 441 inlägg
#5

Du måste bygga sqlfrågan dynamiskt (med PHP i ditt fall). Loopia igenom din array och lägg till OR search_text LIKE '%" . $minarr[$i] . "%' för varje loop. På så sätt kan du ha en eller hundra OR, beroende på arrayen.

Medlem sedan feb. 20034 441 inlägg
#6

Helt otestad och behöver säkert justeras, men principen:

<?php
$minarr = array("ord1", "ord2", "ord3");
$condition = "";
foreach($minarr as $key => $value){
	$condition .= "field1 LIKE '%" . $value . "%' OR";
}
$condition = substr($condition, 0, -3); // Ta bort det sista 'OR'

$minsql = "SELECT "
		 ."field1, field2 "
		 ."FROM tabell "
		 ."WHERE ("
		 .$condition
		 .") "
		 ."ORDER BY field1 ASC";

mysql_query($minsql) or die(mysql_error());
?>
264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)