webForumDet fria alternativet

Hur söker jag i tabell?

PHP

4 svar · 460 visningar · startad av harry_boy

Medlem sedan feb. 2003193 inlägg
Frågan#1

Jag har en tabell som heter tbl_order som jag har innehåller ca 20 fält. Jag skulle vilja veta hur jag från ETT enda formulärssökfält där jag kanske skriver FÖRETAGSNAMN ORT så skall den söka på allt i databasen som där företagsnamnet och orten stämmer.

Hur skulle en sådan kod kunna se ut. Idag är det följande kod och det funkar enbart med sökning på ett ord .. (endast det som söks på)

$query = "SELECT id, kund_foretagsnamn, kund_attention, kund_avdelning, kund_adress, kund_postadress, lev_foretagsnamn, lev_attention, lev_avdelning, lev_adress, lev_postadress, 1_spec, 2_spec, 3_spec, 4_spec, 5_spec, 6_spec, 7_spec, 8_spec, 9_spec, text_1, text_2, text_3, referens, 10_spec, 11_spec, 12_spec, 13_spec, 14_spec, 15_spec, fakturanummer, ordernummer FROM $tbl_order WHERE LOWER(kund_foretagsnamn) LIKE '%". $sokord ."%' OR LOWER(kund_attention) LIKE '%". $sokord ."%' OR LOWER(kund_avdelning) LIKE '%". $sokord ."%' AND LOWER(kund_Adress) LIKE '%". $sokord ."%' OR LOWER(kund_adress) LIKE '%". $sokord ."%' OR LOWER(kund_postadress) LIKE '%". $sokord ."%' OR LOWER(lev_foretagsnamn) LIKE '%". $sokord ."%' OR LOWER(lev_attention) LIKE '%". $sokord ."%' OR LOWER(lev_avdelning) LIKE '%". $sokord ."%' OR LOWER(lev_adress) LIKE '%". $sokord ."%' OR LOWER(lev_postadress) LIKE '%". $sokord ."%' OR LOWER(1_spec) LIKE '%". $sokord ."%' OR LOWER(2_spec) LIKE '%". $sokord ."%' OR LOWER(3_spec) LIKE '%". $sokord ."%' OR LOWER(4_spec) LIKE '%". $sokord ."%' OR LOWER(5_spec) LIKE '%". $sokord ."%' AND LOWER(6_spec) LIKE '%". $sokord ."%' OR LOWER(7_spec) LIKE '%". $sokord ."%' OR LOWER(8_spec) LIKE '%". $sokord ."%' OR LOWER(9_spec) LIKE '%". $sokord ."%' OR LOWER(text_1) LIKE '%". $sokord ."%' AND LOWER(text_2) LIKE '%". $sokord ."%' OR LOWER(text_3) LIKE '%". $sokord ."%' OR LOWER(referens) LIKE '%". $sokord ."%' OR LOWER(10_spec) LIKE '%". $sokord ."%' OR LOWER(11_spec) LIKE '%". $sokord ."%' OR LOWER(12_spec) LIKE '%". $sokord ."%' OR LOWER(13_spec) LIKE '%". $sokord ."%' OR LOWER(14_spec) LIKE '%". $sokord ."%' OR LOWER(15_spec) LIKE '%". $sokord ."%' OR fakturanummer LIKE '%". $sokord ."%' OR ordernummer LIKE '%". $sokord ."%'";

	$result = mysql_query($query);
	
	if(!(mysql_num_rows($result)) == 0)
	{
		
		$color = "FFFFFF";
		
		while($data = mysql_fetch_array($result))
		{
			
			if($color == "FFFFFF")
			{
				$color = "F1F1F1";
			}
			else
			{
				$color = "FFFFFF";
			}
			
			$query_2 = "SELECT type,fakturanummer,kund_foretagsnamn,id FROM $tbl_order WHERE id = '". $data["id"] ."'";
			$result_2 = mysql_query($query_2);
			
			list($type, $faktura_nr, $foretagsnamn) = mysql_fetch_array($result_2);
Medlem sedan maj 20021 558 inlägg
#2

Du får dela upp sökorden vid mellanslag och göra en liten loop för att konstruera SQL-satsen ungefär såhär:

$sokord = "rund pizza";

$parts = explode(" ", $sokord); // skapar en array av sökorden

$sql = "select * from tabell where ";

foreach($parts as $part){
	
	$sql .= " tabellfält like '%$part%' or ";
	
}

$sql = substr($sql, 0, -3); // trimma bort det sista " or"

$sql = "order by ...";
Medlem sedan feb. 2003193 inlägg
#3

Det fick jag att funka men nu matchar den båda varianterna ... dvs om jag skriver företagsnamnet och sedan orten så tar den med alla på företagsnamnet och även alla som har orten. Jag vill att den skall ta med det företagsnamnet på den orten. Sökningen är i en orderlista där jag vill få fram vilka order som är gjorda med just den kunden på just det leveransstället!

Ändringen tror jag bör göras här:

$query .= " kund_foretagsnamn like '%$part%' or lev_postadress like '%$part%' or ";
Medlem sedan feb. 2003193 inlägg
#4

Eller är det enklast att lägga till ett nytt sökfält där jag skriver lev.adress?

Medlem sedan juni 20006 031 inlägg
#5

Eftersom du använder or i din query så måste ju bara någon av delarna uppfyllas. Så ändra till and istället.

258 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)