Functie zoeken in meerdere kolommen in één tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jjriet petersen

jjriet petersen

31/01/2009 16:12:00
Quote Anchor link
Ik zoek de php-functie om te kunnen zoeken in meerdere kolommen in één tabel.

Moet dat met SELECT ** FROM ** WHERE ** OR

of

Moet dat met SELECT ** FROM ** WHERE MATCH ** AGAINST

??

Of moet dat met met iets geheel iets anders ?

Thanks!
 
PHP hulp

PHP hulp

03/01/2025 12:07:06
 
Frank -

Frank -

31/01/2009 16:24:00
Quote Anchor link
Je kunt prima met AND en OR gaan zoeken. Wanneer je MATCH .. AGAINST wilt gebruiken, ben je verplicht om een fulltext-index aan te maken. En dat kan alleen in een MyISAM-tabel en daarmee kun je nu net geen relationele database aanmaken...

Gebruik in MySQL dan ook gewoon de AND of OR daar waar je deze nodig hebt. Mocht je écht met fulltext search aan de slag willen gaan, dan zit er in MySQL niks anders op dan je database omzetten naar het onbetrouwbare MyISAM.

Mocht je over PostgreSQL beschikken, kun je met de tsearch-functies aan de slag, daarmee kun je pas écht fulltext search gaan doen. Je kunt dan zelfs gebruik maken van eigen bibliotheken (denk aan vaktaal) om nog beter te kunnen zoeken, zoeken in verschillende talen, etc. etc. etc. Het gebruik van een index is dan niet eens verplicht, maar het is voor de snelheid vaak wel aan te raden.
 
Jjriet petersen

jjriet petersen

31/01/2009 17:38:00
Quote Anchor link
ik heb namelijk een zoekformulier en wil de bezoeker de mogelijkheid geven om uit meerdere criteria binnen een zelfde kolom te laten zoeken. Dat kan dus als ik het goed begrijp ?
 
Joren de Wit

Joren de Wit

31/01/2009 17:41:00
Quote Anchor link
Dat kan inderdaad prima. Maar probeer het eens uit zou ik zeggen, de database bijt niet ;-)
 
Jjriet petersen

jjriet petersen

01/02/2009 21:29:00
Quote Anchor link
vreemd: als ik nu b.v. in het vrije tekstveld (Frankrijk) invul en vervolgens het soort werk selecteer dat maakt hij niet de combinatie. Het script toont dan alle adressen in Frankrijk en alle adressen van b.v. een Camping. Dat wil niet. Ik wil alléén de resultaten van de in Frankrijk aanwezige campings.

Ik vermoedt dat ik iets niet goed heb begrepen van de AND en OR functies.

Hierbij het script tot nu toe (bestaande uit een zoekpagina en een pagina met het phpscript en de resultaten).

zoekpagina (html)

<form action="DEFrelatiezoekenpostalcodelink.php" method="post">
<blockquote>
<blockquote>
<blockquote>
<p>
<label></label><label></label>
<label>
<input name="zoekwoord" type="text" id="zoekwoord" />
</label>
</p>
<p>
<input name="zoekwoord" type="checkbox" id="zoekwoord" value="Camping" />
<label></label>
</p>
<p>
<input name="zoekwoord" type="checkbox" id="zoekwoord" value="HORECA" />
<label></label>
</p>
<p>
<input name="zoekwoord" type="checkbox" id="zoekwoord" value="Aupair" />
</p>
<p>
<input name="submit22" type="submit" value="zoek" />
</p>
</blockquote>
</blockquote>
</blockquote>
</form></th>


phppagina.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
mysql_connect("***", "***", "***"); //Connecten met DB
mysql_select_db("***");
 
if ($_SERVER["REQUEST_METHOD"] == "POST"){
 
$zoekwoord = mysql_real_escape_string($_POST['zoekwoord']);
 
$sql = mysql_query("
SELECT count(*)
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."%'
OR Camping LIKE '"
.$zoekwoord."%'
OR HORECA LIKE '"
.$zoekwoord."%'
OR Aupair LIKE '"
.$zoekwoord."%'
ORDER BY Bedrijfsnaam ASC"
);
$totalSearch = mysql_result($sql, 0 ,0);
 
print '<p style="float:left;"><h1> </h1></p>';
 
$sql = mysql_query("
SELECT *
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."%'
OR Camping LIKE '"
.$zoekwoord."%'
OR HORECA LIKE '"
.$zoekwoord."%'
OR Aupair LIKE '"
.$zoekwoord."%'
ORDER BY Bedrijfsnaam ASC"
);
 
while($res = mysql_fetch_array($sql)) {
 
print '<p><a href="DEFvacatureoverzicht.php?id='.$res['id'].'">';
print $res['Bedrijfsnaam'].'</a><br />';
print substr($res['Adres'].', '.$res['Postcode'].',
'
.$res['Woonplaats'].', '.$res['Land'],0,250);
print '<br />';
}
}

?>
 
Robert Deiman

Robert Deiman

01/02/2009 21:43:00
Quote Anchor link
Als je echt op alle criteria wil zoeken, waarom doe je dan (versimpelde weergave):

Waar Land = "Frankrijk" OF Camping = "blabla"?

Je moet AND gebruiken om juiste combinaties te maken:

Door ( en ) in je query te gebruiken kan het ook prima:


WHERE Land LIKE 'zoekwoord' AND (.... OR ... OR .....)

Dat betekend dat land moet overeenkomen en 1 van de voorwaarden die tussen ( en ) staan.
 
Jjriet petersen

jjriet petersen

01/02/2009 21:52:00
Quote Anchor link
Robert,

Ik heb het aangepast maar ik denk dat ik weer een foutje maak. Ik krijg nu namelijk helemaal geen resultaten meer.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
mysql_connect("***", "***", "***"); //Connecten met DB
mysql_select_db("***");
 
if ($_SERVER["REQUEST_METHOD"] == "POST"){
 
$zoekwoord = mysql_real_escape_string($_POST['zoekwoord']);
 
$sql = mysql_query("
SELECT count(*)
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."' AND (Camping OR HORECA OR Aupair)
ORDER BY Bedrijfsnaam ASC"
);
$totalSearch = mysql_result($sql, 0 ,0);
 
print '<p style="float:left;"><h1> </h1></p>';
 
$sql = mysql_query("
SELECT *
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."' AND (Camping OR HORECA OR Aupair)
ORDER BY Bedrijfsnaam ASC"
);
 
while($res = mysql_fetch_array($sql)) {
 
print '<p><a href="DEFvacatureoverzicht.php?id='.$res['id'].'">';
print $res['Bedrijfsnaam'].'</a><br />';
print substr($res['Adres'].', '.$res['Postcode'].',
'
.$res['Woonplaats'].', '.$res['Land'],0,250);
print '<br />';
}
}

?>
Gewijzigd op 01/01/1970 01:00:00 door jjriet petersen
 
Jjriet petersen

jjriet petersen

02/02/2009 21:59:00
Quote Anchor link
Weet iemand het antwoord op bovenstaande ? Het is mij nog steeds niet gelukt ! Ik heb echt alles al geprobeerd.

Kan iemand mij helpen ?
 
Jesper Diovo

Jesper Diovo

02/02/2009 22:45:00
Quote Anchor link
Doe wat aan SQL foutafhandeling. Dan weten we misschien al meer over wat er aan de hand is.
 
Jjriet petersen

jjriet petersen

02/02/2009 23:06:00
Quote Anchor link
ik heb er nu foutafhandeling in: het enige resultaat dat ik krijg is 'in query'. Ik heb geen idee wat ik nu verkeerd doe ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
mysql_connect("****", "****", "****"); //Connecten met DB
mysql_select_db("****");
 
if ($_SERVER["REQUEST_METHOD"] == "POST"){
 
$zoekwoord = mysql_real_escape_string($_POST['zoekwoord']);
 
$sql = mysql_query("
SELECT count(*)
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."' AND (Camping OR HORECA OR Aupair)
ORDER BY Bedrijfsnaam ASC"
);
$totalSearch = mysql_result($sql, 0 ,0);
 
print '<p style="float:left;"><h1> </h1></p>';
 
$sql = mysql_query("
SELECT *
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."' AND (Camping OR HORECA OR Aupair)
ORDER BY Bedrijfsnaam ASC"
);

 if($result) {
  if(mysql_num_rows($result) > 0) {
    echo 'Er zijn '.mysql_num_rows($result).' resultaten gevonden.<br />';
    while($rij = mysql_fetch_assoc($result)) {
      // weergeef records
    }
  }
else {
    echo 'Er zijn 0 resultaten gevonden op '.$zoekwoord.'.<br />';
  }
}
else {
  echo mysql_error().' in query: '.$query;
}

while($res = mysql_fetch_array($sql)) {
 
print '<p><a href="DEFvacatureoverzicht.php?id='.$res['id'].'">';
print $res['Bedrijfsnaam'].'</a><br />';
print substr($res['Adres'].', '.$res['Postcode'].',
'
.$res['Woonplaats'].', '.$res['Land'],0,250);
print '<br />';
}
}

?>
 
Robert Deiman

Robert Deiman

02/02/2009 23:14:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$sql
= "
SELECT *
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."' AND (Camping OR HORECA OR Aupair)
ORDER BY Bedrijfsnaam ASC"
;
$result = mysql_query() or trigger_error(mysql_error().'<br />In query: '.$sql;
?>


Allereerst loont het om (nu in de ontwikkelfase zeker) de fouten weer te geven, dat doe je bijvoorbeeld zoals hierboven. (die() zou ik niet gebruiken, want die stopt ook meteen verdere uitvoering van het script.

Maar het gaat er dus om dat je land als het zoekwoord is én dat die dan gaat kijken of het om een aupair gaat, of welke van de opties je hebt aangevinkt?

Je zal dan een "dynamische query" kunnen gebruiken, dan had ik het eerst verkeerd begrepen. Overigens kan je opbouw nooit, want zowel het textveld als de checkboxes hebben dezelfde naam. -> Gebruik verschillende namen voor de velden.

Om je verder te kunnen helpen, moeten we wel meer weten van je opbouw van de database.
 
Jjriet petersen

jjriet petersen

03/02/2009 19:12:00
Quote Anchor link
Op een online inschrijfformulier kan de klant invullen of hij vacature heeft in Frankrijk of in Nederland (in toekomst meerdre landen). Verder moet hij aangeven om wat voor soort vacature het gaat. Dat kan een vacature op een camping zijn. Op een HORECA-gelegenheid of een Aupair-functie. Het kan ook een combinatie zijn. Dus een vacature op een Camping met Horeca-werk en met Aupair-werk. Daarnaast kan dat zijn in Nederland of in Frankrijk. Een vacature kan nooit in Nederland èn in Frankrijk hetzelfde zijn. Het gaat dus om een vacature of voor in Frankrijk of voor Nederland.

Als ik dus een selectie maak op Frankrijk en dan alle vacatures waar een Camping èn een HOreca-functie zijn, vul ik in het uitklapveld Frankrijk in en in de keuzevakjes Camping en Horeca. Als ik vervolgens ga zoeken krijg ik geen resultaten terwijl die er in de database wel zijn!

In mijn database heb ik de volgende velden:
Land
Camping
HORECA
Aupair

Dit is mijn HTML voor het zoekform:
<select name="zoekwoord" id="zoekwoord">
<option value="Land">Frankrijk</option>
<option value="Land">Nederland</option>
</select>
</label>
</p>
<p>
<input name="zoekwoord" type="checkbox" id="zoekwoord" value="Camping" />
<label></label>
</p>
<p>
<input name="zoekwoord" type="checkbox" id="zoekwoord" value="HORECA" />
<label></label>
</p>
<p>
<input name="zoekwoord" type="checkbox" id="zoekwoord" value="Aupair" />
</p>
<p>
<input name="submit22" type="submit" value="zoek" />
</p>
</blockquote>
</blockquote>
</blockquote>
</form></th>


Mijn PHP-script ziet er alsvolgt uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
mysql_connect("******", "******", "******"); //Connecten met DB
mysql_select_db("******");
 
if ($_SERVER["REQUEST_METHOD"] == "POST"){
 
$zoekwoord = mysql_real_escape_string($_POST['zoekwoord']);
 
$sql = mysql_query("
SELECT count(*)
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."' AND (Camping OR HORECA OR Aupair)
ORDER BY Bedrijfsnaam ASC"
);
$totalSearch = mysql_result($sql, 0 ,0);
 
print '<p style="float:left;"><h1> </h1></p>';
 
$sql = mysql_query("
SELECT *
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."' AND (Camping OR HORECA OR Aupair)
ORDER BY Bedrijfsnaam ASC"
);

$res = mysql_query() or trigger_error(mysql_error().'<br />In query: '.$sql;

while($res = mysql_fetch_array($sql)) {

print '<p><a href="DEFvacatureoverzicht.php?id='.$res['id'].'">';
print $res['Bedrijfsnaam'].'</a><br />';
print substr($res['Adres'].', '.$res['Postcode'].',
'
.$res['Woonplaats'].', '.$res['Land'],0,250);
print '<br />';
}
}

?>
Gewijzigd op 01/01/1970 01:00:00 door jjriet petersen
 
Robert Deiman

Robert Deiman

04/02/2009 09:09:00
Quote Anchor link
En welke waarde krijgt een vacature dan? Je hebt kolommen "camping, au-pair of horeca" gebruikt, maar die moeten een bepaalde waarde krijgen.


Eigenlijk moet ik zeggen dat je datamodel niet goed in elkaar zit, als je het slim opbouwt heb je in jou geval een tabel met de landen, een tabel met de soorten vacatures en een koppeltabel.

Je kan heel eenvoudig een nieuw type vacature toevoegen op die manier. Met je huidige opbouw zul jij in de toekomst wanneer je wilt gaan uitbreiden tegen beperkingen aanlopen.
 
Jjriet petersen

jjriet petersen

04/02/2009 12:27:00
Quote Anchor link
Uitbreidingen gaan er niet komen. Het blijft echt hierbij. Ik wil echt bij deze opbouw blijven.

De waarde is vrijwel hetzelfde, dus:
Camping
Aupair
HORECA
De waard bij Land is dus een vrij veld. De waarde geef ik mee middels een uitklapveldje. Dat is voldoende.

Dit werkt echt prima.
Ik heb een werkgeverstabel en een werknemerstabel. Beide met de kolommen, camping, aupair, horeca en beide tabellen metzelfde waarden.

Ik kan heel goed selecteren op alle inschrijvingen die een camping-baan zoeken, of horeca-werk etc. Maar ook ook op werkgevers die iemand voor op de camping, of voor horeca, aupair zoeken. Wat gewoon niet lukt is dat ik als uitgangspunt het land neem.

Ik wil dus weten welke werknemers zich allemaal voor Frankrijk hebben ingeschreven en wie daarvan een campingbaan zoeken. Of een Franse Campingbaan met Horeca zoeken. Dat lukt me juist niet.
 
Robert Deiman

Robert Deiman

04/02/2009 13:11:00
Quote Anchor link
@jjriet,

Ik heb aangegeven hoe ik er tegenaan kijk, verder is het je eigen keuze.Maar welke waarde staat in de kolom "Camping", "Aupair" of "HORECA" als het een vacature voor 1 van deze kolommen betreft.
 
Jjriet petersen

jjriet petersen

04/02/2009 13:30:00
Quote Anchor link
De waarde voor de kolom Camping = Camping
De waarde voor de kolom Aupair = Aupair
De waarde voor de kolom HORECA = HORECA
 
Robert Deiman

Robert Deiman

04/02/2009 15:50:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
//in plaats van wat je nu doet met je query:
$sql = "SELECT *
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."'";
if(!empty($_POST['camping'])){
    $sql_xtra .= " AND (Camping = 'Camping'";
   }

if(!empty($_POST['aupair']) && !empty($sql_xtra)){
    $sql_xtra .= " OR Aupair = 'Aupair'";
    }

else{
    $sql_xtra .= " AND (Aupair = 'Aupair'";
    }

if(!empty($_POST['horeca']) && !empty($sql_xtra)){
    $sql_xtra .= " OR HORECA = 'HORECA'";
    }

else{
    $sql_xtra .= " AND (HORECA = 'HORECA'";
    }

if(!empty($sql_xtra)){
   $sql_xtra .= ")";
   }

$sql .= $sql_xtra;

//$sql gebruik je nu in mysql_query. De query wordt opgebouwd aan de hand van de keuzes die jij hebt gemaakt in de selectboxes.
?>


Je moet nog wel even onderstaande aanpassen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
</p>
<p>
<input name="zoekwoord" type="checkbox" id="zoekwoord" value="Camping" />
<label></label>
</p>
<p>
<input name="zoekwoord" type="checkbox" id="zoekwoord" value="HORECA" />
<label></label>
</p>
<p>
<input name="zoekwoord" type="checkbox" id="zoekwoord" value="Aupair" />
</p>


Wordt dan zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
</p>
<p>
<input name="camping" type="checkbox" id="zoekwoord" value="Camping" />
<label></label>
</p>
<p>
<input name="horeca" type="checkbox" id="zoekwoord" value="HORECA" />
<label></label>
</p>
<p>
<input name="aupair" type="checkbox" id="zoekwoord" value="Aupair" />
</p>
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
 
Jjriet petersen

jjriet petersen

04/02/2009 20:07:00
Quote Anchor link
Ik heb het aangepast maar krijg de volgende error:
Parse error: syntax error, unexpected T_VARIABLE in /./../..

Hij ziet dus een variabele die hij niet verwacht. Volgens mij staan de punt komma's ; er ook overal ?

Wat gaat er verkeerd ?

Ook vroeg ik me af hoe landen-probleem opgelost gaat worden. Ik wil namelijk op het zoekformulier ook het land aan kunnen geven waarbinnen gezocht moet naar camping/horeca of aupairwerk. Nu zoek hij in alle waarden van Land,.........dat is in mij geval zowel Nederland als Frankrijk.

Het volgende script gebruik ik nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
mysql_connect("****", "****", "****"); //Connecten met DB
mysql_select_db("****");
 
if ($_SERVER["REQUEST_METHOD"] == "POST"){
 
$zoekwoord = mysql_real_escape_string($_POST['zoekwoord']);
 
$sql = "SELECT *
FROM Contacts
WHERE Land LIKE '"
.$zoekwoord."'";
if(!empty($_POST['camping'])){
    $sql_xtra .= " AND (Camping = 'Camping'";
   }

if(!empty($_POST['aupair']) && !empty($sql_xtra)){
    $sql_xtra .= " OR Aupair = 'Aupair'";
    }

else{
    $sql_xtra .= " AND (Aupair = 'Aupair'";
    }

if(!empty($_POST['horeca']) && !empty($sql_xtra)){
    $sql_xtra .= " OR HORECA = 'HORECA'";
    }

else{
    $sql_xtra .= " AND (HORECA = 'HORECA'";
    }

if(!empty($sql_xtra)){
   $sql_xtra .= ")"
$sql .= $sql_xtra;

$res = mysql_query() or trigger_error(mysql_error().'<br />In query: '.$sql;

while($res = mysql_fetch_array($sql)) {

print '<p><a href="DEFvacatureoverzicht.php?id='.$res['id'].'">';
print $res['Bedrijfsnaam'].'</a><br />';
print substr($res['Adres'].', '.$res['Postcode'].',
'
.$res['Woonplaats'].', '.$res['Land'],0,250);
print '<br />';
}
}

?>
 
Robert Deiman

Robert Deiman

04/02/2009 22:48:00
Quote Anchor link
}
if(!empty($sql_xtra)){
$sql_xtra .= ")"
$sql .= $sql_xtra;


Daar mist de ; (foutje van mijn :S) achter de middelste regel! En de if die je hier ziet moet voor $sql .= worden afgesloten.
 
Jjriet petersen

jjriet petersen

05/02/2009 09:47:00
Quote Anchor link
Dus je bedoelt de ; achter $sql_xtra .= ")" ?? (dus achter regel 28)

“…..En de if die je hier ziet moet voor $sql .= worden afgesloten…..”
Dus op regel 29 moet ik } zetten en dan $sql .= $sql_xtra; verplaatsen naar regel 30 ?
 
Robert Deiman

Robert Deiman

05/02/2009 10:27:00
Quote Anchor link
@jjriet

Ikheb de vorige reactie aangepast, moet nou goed zijn. :)
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.