Toon posts:

[SQL] Hoe zoekfunctie bouwen met variable die * kan zijn?

Pagina: 1
Acties:
  • 239 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Klein vraagje over sql query's bouwen..

Ik heb al vanalles geprobeerd en gelezen.
Ook de tuturials op got & google leverde me niets op.

Maar ik vraag me dus iets heel simpels af wat ik niet werkend krijg op welke manier dan ook, maar ik ben er zeker van dat het gaat :s

is het mogenlijk om een zoekfunctie te bouwen met een variable waarvan de waarde dus * (dus alles) kan zijn?
Hoe geef ik dit aan? met * of met ALL (of iets anders?)
Beide geven dus geen resultaat hier.

Simpel voorbeeldje van wat ik bedoel:

Ik kom op een site met allemaal huizen.
Ik kan daar het minbudget, max budget, regio, type, etc kiezen.

Maar stel nu dat ik veel geld heb en het niet uitmaakt waar ik ga wonen, zolang ik maar ergens een mooi huis vind, dan zou $prijs, $regio & $type dus * (alles) kunnen zijn.

Maar hoe bouw ik daar dan een query voor?
Met LIKE '%$area%' ?
LIKE * geeft geen resultaat hier, daarom vraag ik me af hoe dat precies moet.

Verwijderd

zonder LIKE :?
Hmm dat werk zo natuurlijk niet met die template...
* is geloof ik wel het teken voor "kan alles of niets zijn" in SQL
Nee das gewoon %... ? is voor 1 teken...

LIKE '%%' zou dus gewoon kunnen werken...


Beetje te snel steeds :p

[ Voor 118% gewijzigd door Verwijderd op 26-07-2004 15:13 ]


Verwijderd

LIKE '%' misschien???

[edit]
zie http://dev.mysql.com/doc/...comparison_functions.html

[ Voor 199% gewijzigd door Verwijderd op 26-07-2004 15:12 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:13

Janoz

Moderator Devschuur®

!litemod

Je kunt je query toch gewoon dynamisch opbouwen? Als iemand dan niks heeft ingevuld bij plaats neem je het stukje regio LIKE '%regio%' gewoon niet op in je query.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je zou kunnen beginnen met WHERE 1=1, dit is altijd waar.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Substance
  • Registratie: December 2000
  • Laatst online: 21-06-2023
Ik neem aan dat je 1 query in je code wil?
Als dit niet zo is kan je het idd af zonder like.

Anders zou je het zo kunnen doen:

WHERE
prijs LIKE '%$prijs%' OR
regio LIKE '%$regio%' OR
type LIKE '%$type%'

[ Voor 17% gewijzigd door Substance op 26-07-2004 15:23 ]


Verwijderd

Zoals Janoz al gezegd heeft: als een bepaald criterium niet uitmaakt voor je query (dat wil zeggen, alles is goed), dan neem je het gewoon niet op in je clause.

Je selecteert alleen op de dingen waarin je onderscheid wilt maken.

Vergelijk: SELECT * FROM tabel, geeft niet niks terug (omdat je geen selectie-criteria opgeeft), maar geeft juist alles terug (omdat je geen voorwaarden opgeeft).

Of nog anders gezegd: criteria neem je alleen op om je zoekresultaat te beperken.

[ Voor 3% gewijzigd door Verwijderd op 26-07-2004 15:24 ]


Verwijderd

Topicstarter
ja ik denk ook dat Janoz de beste oplossing voorstelt..
ik heb net geprobeerd met die % tekens, maar dat leverde ook niets op.

wss bestaat er dan gewoon geen teken of waarde om alles te selecteren na een LIKE en worden zoekfuncties altijd dynamisch opgebouwd?

Toch vraag ik mij nog af wat die oplossing van Substance zou retourneren.
Waarschijnlijk zal die fout gaan zijn omdat die maar kijkt naar 1 van de 3 waarde door die OR?
bv: regio stemt overeen, rest niet, maar het zal toch dat resultaat terug geven omdat die regio overeen stemt en dat is genoeg? (or..) Of kijkt die stiekum toch naar die 3 waardes? :s

[ Voor 42% gewijzigd door Verwijderd op 26-07-2004 15:31 ]


Verwijderd

Verwijderd schreef op 26 juli 2004 @ 15:27:
wss bestaat er dan gewoon geen teken of waarde om alles te selecteren na een LIKE en worden zoekfuncties altijd dynamisch opgebouwd?
Eh? Alles selecteren wordt, zoals gezegd, gedaan door alle criteria weg te laten.

Bovendien kun je in een LIKE "aap%" selectie de % gebruiken om een willekeurig aantal karakters (0 of meer) te matchen. Maar dat heeft alleen betrekking op tekst strings.

[ Voor 34% gewijzigd door Verwijderd op 26-07-2004 15:31 ]


  • Ashtaroth
  • Registratie: December 2003
  • Laatst online: 16-02 09:59
Ik weet niet welke database je gebruikt, maar SQL Server kent hier de functie COALESCE voor.

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Ik heb ergens gelezen een keer dat LIKE niet zo snel was en dat je beter gewoon =%$zoekitem% kon gebruiken.

Verwijderd

Topicstarter
Ashtaroth schreef op 26 juli 2004 @ 21:37:
Ik weet niet welke database je gebruikt, maar SQL Server kent hier de functie COALESCE voor.
ik heb het nu opgelost door 'm volledig dynam. te make, werkt goed, maar toch ff gegoogled naar die COALESCE van jou.


Return Types
Returns the same value as expression

Remarks
If all arguments are NULL, COALESCE returns NULL.


Het lijkt alsof dat inderdaad was wat ik zocht

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 23-05 11:16

pietje63

RTFM

Met een if empty check?

Ik doe het meestal ongeveer zo:

PHP:
1
2
3
4
5
6
7
8
if (!empty($zoekterm1)
  {
  $query .= and `zoekterm1` = '$zoekterm1'
  }
if (!empty($zoekterm2)
  {
  $query .= and `zoekterm2` = '$zoekterm2'
  }

Als je teveel termen hebt kun je ze gewoon in een array zet ofzo

[edit]
Hmm, puur sql topic :+ .. Dit is iig een php oplossing :9

[ Voor 15% gewijzigd door pietje63 op 27-07-2004 12:39 ]

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Verwijderd

Als je nog een PHP oplossing wilt:

PHP:
1
2
3
4
5
6
7
8
9
10
$conditions = Array();

// ...
$conditions[] = "`aap` = 'noot'";
$conditions[] = "`leeftijd` < 8";
// ...

$whereclause = count($conditions) ? "WHERE " . implode(" AND ", $conditions) : "";

mysql_query("SELECT * FROM tabel $whereclause");


Dit is uiteraard naar believen zo generiek/gemakkelijk te maken als je wilt.

[ Voor 25% gewijzigd door Verwijderd op 27-07-2004 12:47 ]

Pagina: 1