AND OR in sql

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis

Dennis

18/07/2008 20:01:00
Quote Anchor link
Hallo allemaal,

Ik de volgende query voor een form waar je kan zoeken op vacatures.
Nu kan je laten zoeken op diverse waarden, echter je moet verplicht alles invullen.

Hoe kan ik bijvoorbeeld alle vacatures te voorschijn laten komen als ik alleen region bijvoorbeeld wil selecteren in mijn form....

Dit heb ik momenteel :

Edit:

Volledige script nu geplaats


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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
    <?php
    $query
= "SELECT *
              FROM vacatures
              WHERE job_type='"
. mysql_real_escape_string($_POST['job_type']) . "'
              
              ORDER BY region DESC"
;
$result = mysql_query($query) or die(mysql_error());

?>


    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="Post"><br />
      <h3 class="lime">Zoek vacatures</h3>
            <table id="home_search">
                <tr>
                    <th class="oranje">Dienstverband</th>
                    <th class="oranje">Beroepsgroepen</th>
                    <th class="oranje">Locaties</th>
                    <th class="oranje">Trefwoorden</th>
                </tr>
                <tr>
                    <td style="vertical-align: top; text-align: right;"><select id="job_type" name="job_type"><option value=''>Kies hier...</option>
                        <option value="1">Fulltime ( Starter )</option>
                        <option value="4">Fulltime (doorgroeifunctie)</option>
                        <option value="2">Stage</option>
                        <option value="3">Vakantiewerk</option>
                    </select></td>
                    <td style="vertical-align: top; text-align: right;"><select id="function" name="function"><option value=''>Kies hier...</option>
                        <option value="1">Elektrotechnisch / Electronica</option>
                        <option value="2">Bouw / Civiel technisch</option>
                        <option value="3">Technisch / Klusser / Monteur</option>
                        <option value="4">Projectmanagement</option>
                        <option value="5">ICT</option>
                        <option value="6">Administratief</option>
                        <option value="7">Algemeen management</option>
                        <option value="8">Chemisch / Farmaceutisch</option>
                        <option value="9">Metaaltechnisch / Werktuigbouwkundig</option>
                        <option value="10">Personeel en Organisatie</option>
                    </select></td>
                    <td style="vertical-align: top; text-align: right;"><select id="region" name="region"><option value=''>Kies hier...</option><option value="1">Alkmaar</option>
                        <option value="2">Almelo</option>
                        <option value="3">Almere</option>
                        <option value="4">Alphen aan den Rijn</option>
                        <option value="5">Amersfoort</option>
                        <option value="6">Amsterdam</option>
                        <option value="7">Apeldoorn</option>
                        <option value="8">Arnhem</option>
                        <option value="9">Assen</option>
                        <option value="10">Baarn</option>
                        <option value="11">Bergen op Zoom</option>
                        <option value="12">Breda</option>
                        <option value="13">Culemborg</option>
                        <option value="14">Delft</option>
                        <option value="15">Den Bosch</option>
                        <option value="16">Den Haag</option>
                        <option value="17">Deventer</option>
                        <option value="18">Doetinchem</option>
                        <option value="19">Dordrecht</option>
                        <option value="20">Drachten</option>
                        <option value="21">Driebergen</option>
                        <option value="22">Dronten</option>
                        <option value="23">Ede</option>
                        <option value="24">Eindhoven</option>
                        <option value="25">Emmen</option>
                        <option value="26">Enschede</option>
                        <option value="27">Gorinchem</option>
                        <option value="28">Gouda</option>
                        <option value="29">Groningen</option>
                        <option value="30">Haarlem</option>
                        <option value="31">Harderwijk</option>
                        <option value="32">Heerenveen</option>
                        <option value="33">Heerlen</option>
                        <option value="34">Helmond</option>
                        <option value="35">Hengelo</option>
                        <option value="36">Hilversum</option>
                        <option value="37">Hoofddorp</option>
                        <option value="38">Hoogeveen</option>
                        <option value="39">Hoorn</option>
                        <option value="40">Kampen</option>
                        <option value="41">Leeuwarden</option>
                        <option value="42">Leiden</option>
                        <option value="43">Lelystad</option>
                        <option value="44">Maastricht</option>
                        <option value="45">Naaldwijk</option>
                        <option value="46">Nijmegen</option>
                        <option value="47">Oosterhout</option>
                        <option value="48">Oss</option>
                        <option value="49">Rijswijk</option>
                        <option value="50">Roermond</option>
                        <option value="51">Roosendaal</option>
                        <option value="52">Rotterdam</option>
                        <option value="53">Schiphol</option>
                        <option value="54">Sittard</option>
                        <option value="55">Tilburg</option>
                        <option value="56">Uden</option>
                        <option value="57">Utrecht</option>
                        <option value="58">Veenendaal</option>
                        <option value="59">Velp</option>
                        <option value="60">Venlo</option>
                        <option value="61">Vlissingen</option>
                        <option value="62">Waalwijk</option>
                        <option value="63">Wageningen</option>
                        <option value="64">Zaandam</option>
                        <option value="65">Zoetermeer</option>
                        <option value="66">Zutphen</option>
                        <option value="67">Zwolle</option>
                    </select></td>
                    <td style="vertical-align: top; text-align: right;"><input id="keyword" name="keyword" type="text" /></td>
                </tr>
                <tr>
                    <td colspan="1" style="vertical-align: top;">
                        </td>
                    <td colspan="3" style="vertical-align: top; text-align: right;">
                        <input name="Submit" type="Submit" id="Submit" value="Zoek" /></td>
                </tr>
            </table>
    </form>

<?php
if($_SERVER['REQUEST_METHOD'] == "POST")
{

    if(isset($_POST['job_type'], $_POST['function'], $_POST['region'], $_POST['keyword']))
    {

        $query = "SELECT *
              FROM vacatures
              WHERE job_type='"
. mysql_real_escape_string($_POST['job_type']) . "'
              AND function='"
. mysql_real_escape_string($_POST['function']) . "'
              AND region='"
. mysql_real_escape_string($_POST['region']) . "'
              AND keyword='"
. mysql_real_escape_string($_POST['keyword']) . "'
              ORDER BY region DESC"
;
        $result = mysql_query($query) or die(mysql_error());
        if(mysql_num_rows($result) == 0)
        {

            echo '<table width="100%" border="0">
                    <tr>
                        <td colspan="4">Er zijn geen vacatures gevonden die aan uw criteria voldoen</td>
                    </tr>
                </table>'
;
        }

        else
        {
            echo '<table width="100%" border="0">';
            echo '<tr>
                    <td colspan="3"\><strong>De volgende vacatures zijn voor u gevonden : </strong></td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                <td>Titel : </td>
                    <td>Jobtype : </td>
                    <td>Functie:</td>
                    <td>Regio : </td>
                    <td>Gezocht op :</td>
                </tr>'
;
                // keeps getting the next row until there are no more to get
            while($row = mysql_fetch_array( $result ))
            {

                echo '<tr>
                         <td><a href="'
.$row['url'].'" target="_blank">'.$row['titel'].'</a></td>
                         <td>'
.$row['job_type'].'</td>
                        <td>'
.$row['function'].'</td>
                        <td>'
.$row['region'].'</td>
                        <td>'
.$row['keyword'].'</td>
                    </tr>'
;
            }

            echo '</table>';
        }
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Dennis
 
PHP hulp

PHP hulp

23/12/2024 11:34:58
 
- SanThe -

- SanThe -

18/07/2008 20:10:00
Quote Anchor link
Geen and maar or gebruiken?
 
Joren de Wit

Joren de Wit

18/07/2008 20:32:00
Quote Anchor link
De queries dynamisch samenstellen en alleen die kolommen erin opnemen waar ook daadwerkelijk gegevens voor ingevuld zijn?
 
Dennis

Dennis

18/07/2008 20:39:00
Quote Anchor link
@ Santhe : Als ik de AND vervang door OR ( had ik al geprobeerd ), dan vind die niets en krijg ik wel netjes de melding :

Er zijn geen vacatures gevonden die aan uw criteria voldoen

@ Blanche : Hoe bedoel je dat precies ?
 
Dennis

Dennis

18/07/2008 22:55:00
Quote Anchor link
Opgelost! :)
 
Joren de Wit

Joren de Wit

18/07/2008 23:01:00
Quote Anchor link
Geef ook hier je oplossing nog even, dan hebben anderen er wellicht wat aan...
 
Dennis

Dennis

18/07/2008 23:10:00
Quote Anchor link
Het probleem zat hem in het niet juist gebruiken van de AND of OR.
Ik heb dit opgelost op de volgende manier :

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
<?php
if($_SERVER['REQUEST_METHOD'] == "POST")
{

    if(isset($_POST['job_type'], $_POST['function'], $_POST['region']))
    {

        $query = "SELECT *
              FROM vacatures
              WHERE job_type='"
. mysql_real_escape_string($_POST['job_type']) . "'
              OR (job_type='"
. mysql_real_escape_string($_POST['job_type']) . "' AND function='" . mysql_real_escape_string($_POST['function']) . "')
              OR (job_type='"
. mysql_real_escape_string($_POST['job_type']) . "' AND region='" . mysql_real_escape_string($_POST['region']) . "')
              OR function='"
. mysql_real_escape_string($_POST['function']) . "'
              OR (function='"
. mysql_real_escape_string($_POST['function']) . "' AND region='" . mysql_real_escape_string($_POST['region']) . "')
              OR region='"
. mysql_real_escape_string($_POST['region']) . "'      
              ORDER BY region DESC"
;
?>


Alleen nu zou ik het nog iets fraaier willen door middel van een match percentage. Dus als je alleen functie selecteerd, de resulaten daarvan zijn dan 33,3 %...je resultaten als je 2 waarden hebt ingevuld die matchen...66,6 %

Alleen dat gaat me nu net te ver...daarbij...heb zwaar vierkante ogen nu...

Iemand een suggestie ?
 
Emmanuel Delay

Emmanuel Delay

19/07/2008 02:53:00
Quote Anchor link
Wat je kan doen: je kan extra velden in je select steken die uit berekeningen bestaan.

De WHERE filtert alles weg dat niet dat niet voldoet aan wat je vraagt.

Eerst en vooral is het best niet de * te gebruiken, maar alle velden opsommen die je nodig hebt.

Je kan bv. ook iets doen in de zin van:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<? $query = "SELECT job_type, function, ..., (jobtype = '" . $_POST['job_type'] . "') AS voldoet_aan_jobtype,  (function= '" . $_POST['function'] . "') AS voldoet_aan_function, ...
              FROM vacatures
              ;"
;
?>


Dan kan je beginnen rekenen (in MySQL) met voldoet_aan_jobtype en voldoet_aan_jobtype. Je kan bv. nog een extra veld aanmaken dat berekent hoeveel van die velden niet NULL zijn.

Kijk, het is geen uitgewerkt voorbeeld hoor, gewoon een andere denkpiste. Ik heb niet direct een goed voorbeeld bij de hand, daarbij, het is nu 3 uur 's nachts. Als ik een uitgewerkt voorbeeld vind, post ik het.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
 
Robert Deiman

Robert Deiman

19/07/2008 07:45:00
Quote Anchor link
Wil je met die percentages werken, zou je FULL_TEXT_SEARCH moeten gebruiken. Zelf een script schrijven dat dat berekend is niet handig, het wiel opnieuw uitvinden ook niet.
 
Dennis

Dennis

21/07/2008 09:56:00
Quote Anchor link
Emmanuel en Robert, alvast bedankt voor het reageren.

Zodra ik enigszins het idee heb in de goede richting te zijn zal ik het hier direct posten...verder mocht iemand suggesties hebben om dit op een goede manier op/aan te kunnen pakken.

Feel free...
 
Jjriet petersen

jjriet petersen

26/03/2009 08:56:00
Quote Anchor link
Beste Dennis,

Graag wilde ik weten wat de bijbehorende tabelstructuur is. Zou je misschien de SQL van deze tabel kunnen posten . Bedankt!

(ik neem aan dat het formulier nog werkt ?
 



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.