Oprettet tir. d. 27. oktober 2009 kl. 09:38:18

frulilla (nedlagt brugerprofil)
frulilla (nedlagt brugerprofil) (4.825 point. Point ude: 200)

Udtræk af databasen

Jeg sidder og arbejder med en side, hvor jeg skal have nogle data trukket ud af databasen.

Jeg har lavet et søgefelt, hvor man skal kunne indskrive søgeordet, og så finde den virksomhed, som det ralaterer til.

I datasen har jeg bl. andet en trade og name. Det er disse 2, som man skal kunne søge ud fra.

Lige nu virker det, så søger man f.eks på elartikler kommer der virksomheder op med dette. Men søger man på el, får man ligeledes begrav<b>el</b>sesforretninger op. Endvidere vil den ikke finde noget, når man søger på forretningens name.

Hvad har jeg fået lavet forkert?



if ($search) {
    $sql = "SELECT * FROM companies WHERE company_index_lvl > 0 AND name OR trade LIKE '%$search%' ORDER BY name";
} elseif ($mode == 'profile') {
    $sql = "SELECT * FROM companies WHERE id = $company_id LIMIT 1";
} else {   
    $sql = "SELECT * FROM companies WHERE company_index_lvl > 0 ORDER BY name";
}

$result = mysql_query($sql);

Skrevet tir. d. 27. oktober 2009 kl. 09:57:18| #1

mrgumble
mrgumble (23.916 point)
Du har ikke gjort noget som helst forkert. Men du skal kigge på din SQL-sætning:

$sql = "SELECT * FROM companies WHERE company_index_lvl > 0 AND name OR trade LIKE '%$search%' ORDER BY name";

For det første skal name og trade laves parvis, så du skal ændre det sidste til:
$sql = "SELECT * FROM companies WHERE company_index_lvl > 0 AND name LIKE '%$search%' OR trade LIKE '%$search%' ORDER BY name";

Hvorfor finder den så begravelsesforretninger? Fordi din '%$search%' siger det - din søgestreng skal således bare optræde et vilkårligt sted i name eller trade. Du kan evt. overveje, om det kun skal optræde i begyndelsen ('$search'), eller om du skal kræve længere søgestrenge, da 'el' er en meget almindelig kombination af bogstaver i det danske sprog. Desværre hjælper det ikke på dit tilfælde med el.

Skrevet tir. d. 27. oktober 2009 kl. 09:59:56| #2

Christian_Belgien
Christian_Belgien (43.628 point)
Du skal sige: "WHERE company_index_lvl > 0 AND name LIKE .... OR company_index_lvl > 0 AND trade LIKE ...."
Det er et spoergsmaal om prioriteter hvor AND har hoejere prioritet end OR.

Med hensyn til din searchterm saa kommer det an paa hvad du vil.  Ved at saette wildcard % foran og efter $select saa beder du om hvad du faar - begrav el sesforretning indeholder el med nul eller mere bogstaver foran og nul eller mere bogstaver bagved.  Hvis du kun vil have ord der begynder med din seachterm saa drop % foran $search.

Skrevet tir. d. 27. oktober 2009 kl. 10:00:11| #3

woodbase
woodbase (18.700 point)
Hej

Du har wild cards på begge sider af din søgestreng. Derfor vil alle records hvor el indgår komme med, så det er vel egentlig ikke en fejl? Hvis den kun skal ramme det præcise ord så skal '%' vel bare væk - eller har jeg misforstået noget?

Skrevet tir. d. 27. oktober 2009 kl. 10:08:23| #4

Christian_Belgien
Christian_Belgien (43.628 point)
mrgumble naaede at lave et svar mens jeg skrev mit.  Vi siger det samme om searhtermen, men vi er uenige om SQL termen.  Jeg lavede en lille test, og paa mit system vil mgumble's sql expression give ENTEN companies med index>0 og navn lig searchtermen ELLER companies med trade lig searchtermen uanset index. Hvis det ikke er det du vil er skemaet:

(index>0 AND searchterm) OR (index>0 AND searchterm).  Paranteserne kan du droppe, de er kun tilfoejede for illustration.

Skrevet tir. d. 27. oktober 2009 kl. 10:32:00| #5

Mange tak for jeres super gode svar - og hurtige. I mellemtiden sad jeg og kiggede og tænkte og kom også frem til at name og trade skulle laves parvis.

Hvis jeg fjerner % i søgestrengen, vil den ikke vise noget. Så det har jeg beholdt, og forklaringen er jo egentlig ret logisk, Det ikke gode søgeord at bruge ordet "el" eller "it".

Ellers virker det upåklageligt nu, og jeg vil gerne dele pointene mellem de svar jeg har brugt.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Kopier alt fra een column til en anden med streng foran

Oprettet den 25. maj 2012 kl. 04.55
dmg giver 30 point for svar | Giv et svar »

Unique varchar

Oprettet den 25. maj 2012 kl. 04.34
dmg giver 30 point for svar | Giv et svar »

hvem kan flytte min webside fra MySQL 3 database til en...

Oprettet den 24. maj 2012 kl. 11.18
runebase giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger