zoeken in mysql database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roy marijnissen

roy marijnissen

03/06/2009 12:03:00
Quote Anchor link
Ik ben op zoek een scriptje waarmee ik kan zoeken in een mysql databas. Ik heb een database waarin allemaal prijzen staan. b.v. €10 , €17,50 etc. Nu zou ik willen dat er met een zoekfunctie gezocht kan worden, en dann dat iemand b.v. ingeeft dat hij iets zoekt van minder dan €20 en dat hij dan die 2 resultaten krijgt. Hoe kan ik dat doen ?
 
PHP hulp

PHP hulp

29/11/2024 11:39:56
 
Sven

Sven

03/06/2009 12:31:00
Quote Anchor link
Hey,

Ik hoop dat je je bedragen opslaat als int (dus bedrag * 100) of als decimal?
In ieder geval dus niet met het € erbij.

je kan dan in iedergeval een sql select doen met een where statement:
SELECT kolom_namen FROM tabel_naam WHERE price < --GIVENPRICE--

Dus:

je maakte een form waarbij je action post is.
je hebt een dropdownlist met maxprices (of invulveld).
je hebt een dropdownlist met minprices (of invulveld).
(wil je geen min laat dit scirpt 't altijd 0 - best is wel het te verwijderen uit de sql, onnodig opzoekwerk voor je server enzo)

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

$maxprice
= mysql_real_escape_string($_POST['maxPrice']);
$maxprice = $maxprice?$maxprice:0;

$minprice  = (mysql_real_escape_string($_POST['minPrice']);
$maxprice = $minprice?$minprice:0;

if (is_numeric($maxprice) && is_numeric($minprice))
{

/*put you db conn here*/
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
/*put you db conn above*/
if (!$link) {
    die('Could not connect: ' . mysql_error());
}

$selectItemsForRightPrice = "SELECT itemId, price FROM itemPrices WHERE price < ".$maxprice." AND price > ".$minprice;
$resultItemsForRightPrice =  mysql_fetch(selectItemsForRightPrice);
if (!$result)
{

die('Could not query:' . mysql_error());
}

if (mysql_num_rows($result) == 0)
{

echo "No rows found, nothing to print so am exiting";
exit;
}

while ($row = mysql_fetch_assoc($result))
{

echo "the item ".$row["itemId"]." costs "..$row["price "];
}


mysql_close($link);
unset($selectItemsForRightPrice );
unset($result);
unset($row );
}

else
{
echo "you naugthy boy";
}

?>


Zo, ik hoop dat dit je verder helpt.

Cha Né
Gewijzigd op 01/01/1970 01:00:00 door Sven
 
Roy marijnissen

roy marijnissen

03/06/2009 12:40:00
Quote Anchor link
Thanks ! ziet er goed uit zo. Heb de getallen nu helaas nog met € erbij opgeslagen. dit moet dus anders. Alleen mijn vraag is jij geeft aan dit als int te doen en en dan *100. Wat bedoel je daar precies mee ?
 
Kitty N

kitty N

03/06/2009 13:08:00
Quote Anchor link
Ik denk dat hij bedoelt dat je het als centen gaat opslaan. Stel je hebt 1 euro * 100 = 100 cent ;)
 
Hipska BE

Hipska BE

03/06/2009 13:13:00
Quote Anchor link
€ 55.34 * 100 komt uit op 5534 en dit is een geheel getal.

http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#operator_between
Hier zie je dat je kan zoeken tussen 2 waarden bv prijs BETWEEN 0 AND 20 of BETWEEN 20 AND 50

ook kan WHERE prijs < 20 de juiste resultaten geven..
 
Roy marijnissen

roy marijnissen

03/06/2009 13:14:00
Quote Anchor link
a zo dan moet ik dus de uiteindelijke resultaten ook weer delen door 100 en dan heb ik weer de goede prijs :) Snap het.

Nog even één vraagje. Ik zou eigenlijk ook willen dat hij nog een andere kolom erbij neemt. Dus je hebt nu prijs tussen de 10 en 20 bijvoorbeeld. En dat hij dan uit de kolom "retentie" ook weer kan kiesen tussen 50 en 100 of tussen 100 en 200 etc. Hoe kan ik dat dan doen ?
Gewijzigd op 01/01/1970 01:00:00 door roy marijnissen
 
Kitty N

kitty N

03/06/2009 13:28:00
Quote Anchor link
Je hebt in je database een veld prijs en een veld retentie?

Je wil dus bij prijs zeggen tussen de 10 en 20
en bij retentie tussen de 50 en 100?

Als ik het goed begrijp krijg je ongeveer zo:

WHERE (prijs BETWEEN 10 AND 20) AND (retentie BETWEEN 50 AND 100)

Ik dacht dat het ongeveer zo was.
 
Roy marijnissen

roy marijnissen

03/06/2009 13:47:00
Quote Anchor link
dat is idd precies wat ik bedoelde. Bedankt !
 
Afra ca

Afra ca

03/06/2009 16:02:00
Quote Anchor link
Let op, Sven's script is eerlijk gezegd beetje bagger...... Denk dat ik zometeen even de moeite neem het te herschrijven, want ik raad je sterk af dit te gebruiken....

edit: ben niet heel goed met ternary operators, dus schrijf beginnetje even iets uitgebreider, maar is misschien ook wat makkelijker te begrijpen. edit2 bevat goede versie

edit2:

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
<?php

/*Hier uitgaande van een apart bestand waar de connectie gemaakt word*/
require_once "connect_db.php";

/* Als de maximale prijs of minimale prijs niet gegeven is de prijs op 0 zetten*/
if(empty($_POST['maxprice'])){
    $_POST['maxprice'] = 0;
}


if(empty($_POST['minprice'])){
    $_POST['minprice'] = 0;
}


/*Als de variabelen niet numeriek zijn, dit melden*/
if (!is_numeric($_POST['maxprice') OR !is_numeric($_POST['minprice')){
    echo 'De opgegeven waarden zijn niet numeriek, probeer opnieuw.';
}

else {
    /* Query opbouwen met de gegevens*/
    $sql = "SELECT itemID, price FROM itemPrices WHERE price < ".mysql_real_escape_string($_POST['maxprice'])." AND price > ".mysql_real_escape_string($_POST['minprice'])."";
    $result = mysql_query($sql);
    /* Als query mislukt is dit melden*/
    if(!$result){
        trigger_error(mysql_error());
    }

    else {
        $count = mysql_num_rows($result);
        /* Als query gelukt is, maar er geen rijen zijn, dit melden*/
        if($count == 0){
            echo 'Geen resultaten gevonden helaas. Probeer opnieuw.';
        }

        else {
            /* Het resultaat laten zien*/
            while($rows = mysql_fetch_assoc($result)){
                echo 'Het artikel '.$rows['itemId'].' kost '.$rows['price'].'<br />';
            }
        }
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Afra ca
 
Sven

Sven

04/06/2009 15:55:00
Quote Anchor link
@ Afra: Explain Bagger...
(wou het overzichtelijk en in makkelijke stappen houden (en had niet direct men editor bij de hand))

Dit laatste scirpt ziet er inderdaat goed uit.


@ Roy: Ik hou niet van floats noch decimals in de db. Noem het persoonlijke voorkeur of net iets teveel afrondingsfouten meegemaakt.
Sorry voor m'n late responce.
 
Roy marijnissen

roy marijnissen

13/06/2009 21:36:00
Quote Anchor link
Even een oud bericht omhoog halen maar door omstandigheden geen tijd gehad eerder hiermee verder te gaan. Alles lukt nu goed alleen heb ik nog 1 vraagje. Als ik onderstaande code heb :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
  $sql="SELECT * FROM aanbieders_nieuw WHERE snelheid > ".mysql_real_escape_string($_POST['van'])." ORDER BY snelheid DESC";


In de DB staat bij snelheid b.v. 5mbit , 20mbit, etc. Maar er staan ook soms in "unlimited". Bij het zoeken kan gekozen worden uit 5mbit,20mbit etc. dit gaat dus goed, alleen nu wil ik dat hij ALTIJD de informatie meeneemt als de snelheid unlimited is. Hoe doe ik dat dan aan deze string toevoegen ?
 
Niels DB

Niels DB

13/06/2009 21:48:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
="SELECT * FROM aanbieders_nieuw WHERE snelheid > ".mysql_real_escape_string($_POST['van'])." OR snelheid = 'unlimited' ORDER BY snelheid DESC";
?>

zo lijkt mij?
Maar kan je > doen bij dingen die geen getallen zijn? 5mbit is een string.

-edit- Maak anders de unlimited dingen 0 dan is het ook een INT.
Gewijzigd op 01/01/1970 01:00:00 door Niels DB
 
Joren de Wit

Joren de Wit

13/06/2009 22:00:00
Quote Anchor link
Niels geeft het al gedeeltelijk aan, maar hoe wil jij ooit gaan vergelijken of de ene string groter is dan de andere? Dat is onmogelijk en zal nooit betrouwbare resultaten opleveren!

Sla de snelheid gewoon als integer op, dus gewoon 5, 10, 20 zonder die mbit toevoeging. Voor een onbeperkte snelheid kun je de snelheid leeglaten (NULL). In dat geval kun je gewoon de grootte van verschillende waarden vergelijken.
 
Roy marijnissen

roy marijnissen

13/06/2009 22:02:00
Quote Anchor link
Oja tuurlijk kan alleen bij een int stom. Zal ik de tabel toch moeten omzetten :)
 
Roy marijnissen

roy marijnissen

13/06/2009 23:18:00
Quote Anchor link
Nu ik er weer mee aan het werk ben geweest toch weer even een vraagje.
Als bij snelheid Meer dan 100 wordt gekozen worden in de resultaten 100 niet meegenomen. Hoe zorg ik er ervoor dat dit wel zo is ? ">" vervangen voor ...
 
Joren de Wit

Joren de Wit

13/06/2009 23:27:00
Quote Anchor link
Gebruik dan het >= (groter dan of gelijk aan) teken.
 



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.