Momenteel ben ik bezig met het maken van een soort van vergelijkingsscript... Ik heb een database met ca 100 woningen. De eigenschappen van de woning zijn er ook allemaal in opgeslagen.
Nu wil ik kijken welke woning het beste matches bij een andere woning...
Hiervoor gebruik ik (momenteel) 9 vergelijkingsitems o.a.:
1. Prijs (met een ingestelde marge van 10%)
2. Plaats
3. Woonoppervlakte (met een ingestelde marge)
<?
//ZOEK CRITERIA PRIOTITEITEN INSTELLEN
$pr1 = "prijs>='". $prijs_laag ."' AND prijs<='". $prijs_hoog ."' AND "; //PRIJS
$pr2 = "plaats='". $laatst_bekeken_woning_plaats ."' AND "; //PLAATS
$pr3 = "woonoppervlak>='". $laatst_bekeken_woning_woonoppervlak_laag ."' AND woonoppervlak<='". $laatst_bekeken_woning_woonoppervlak_hoog ."' AND "; //WOONOPPERVLAK
?>
<?
//ZOEK CRITERIA PRIOTITEITEN INSTELLEN
$pr1="prijs>='".$prijs_laag."' AND prijs<='".$prijs_hoog."' AND ";//PRIJS
$pr2="plaats='".$laatst_bekeken_woning_plaats."' AND ";//PLAATS
$pr3="woonoppervlak>='".$laatst_bekeken_woning_woonoppervlak_laag."' AND woonoppervlak<='".$laatst_bekeken_woning_woonoppervlak_hoog."' AND ";//WOONOPPERVLAK
?>
Daarna zoek ik naar het object welke het beste matches, momenteel doe ik dat zo:
//ALLE (9) PRIORITEITEN MATCHEN
$select_object = mysql_query("SELECT * FROM object WHERE status2='actief' AND ". $pr1 . $pr2 . $pr3 . $pr4 . $pr5 . $pr6 . $pr7 . $pr8 . $pr9 . $sql_genrid ." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
$referenties = mysql_num_rows($select_object);
if ($referenties==0)
{
//8 PRIORITEITEN MATCHEN
//-prioriteit 9
$select_object = mysql_query("SELECT * FROM object WHERE status2='actief' AND ". $pr1 . $pr2 . $pr3 . $pr4 . $pr5 . $pr6 . $pr7 . $pr8 . $sql_genrid ." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
$referenties = mysql_num_rows($select_object);
if ($referenties==0)
{
//-prioriteit 8
$select_object = mysql_query("SELECT * FROM object WHERE status2='actief' AND ". $pr1 . $pr2 . $pr3 . $pr4 . $pr5 . $pr6 . $pr7 . $pr9 . $sql_genrid ." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
$referenties = mysql_num_rows($select_object);
if ($referenties==0)
{
//ENZOVOORT...
//DAARNA 7 PRIORITEITEN MATCHEN
//-prioriteit 9 & 8
$select_object = mysql_query("SELECT * FROM object WHERE status2='actief' AND ". $pr1 . $pr2 . $pr3 . $pr4 . $pr5 . $pr6 . $pr7 . $sql_genrid ." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
$referenties = mysql_num_rows($select_object);
if ($referenties==0)
{
//-prioriteit 9 & 7
$select_object = mysql_query("SELECT * FROM object WHERE status2='actief' AND ". $pr1 . $pr2 . $pr3 . $pr4 . $pr5 . $pr6 . $pr8 . $sql_genrid ." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
$referenties = mysql_num_rows($select_object);
if ($referenties==0)
{
//ENZOVOORT
//DAARNA EVT 6, 5, 4, 3, 2, 1 prioriteiten matchen
//ALLE (9) PRIORITEITEN MATCHEN
$select_object=mysql_query("SELECT * FROM object WHERE status2='actief' AND ".$pr1.$pr2.$pr3.$pr4.$pr5.$pr6.$pr7.$pr8.$pr9.$sql_genrid." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
$select_object=mysql_query("SELECT * FROM object WHERE status2='actief' AND ".$pr1.$pr2.$pr3.$pr4.$pr5.$pr6.$pr7.$pr8.$sql_genrid." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
$select_object=mysql_query("SELECT * FROM object WHERE status2='actief' AND ".$pr1.$pr2.$pr3.$pr4.$pr5.$pr6.$pr7.$pr9.$sql_genrid." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
$select_object=mysql_query("SELECT * FROM object WHERE status2='actief' AND ".$pr1.$pr2.$pr3.$pr4.$pr5.$pr6.$pr7.$sql_genrid." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
$select_object=mysql_query("SELECT * FROM object WHERE status2='actief' AND ".$pr1.$pr2.$pr3.$pr4.$pr5.$pr6.$pr8.$sql_genrid." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
Het enigste wat eventueel zou kunnen, is kijken welke parameters zijn meegegeven en welke waarde ze hebben, en op basis daarvan de code een if laten genereren.
Maar zelfs van dit weet ik niet of dat wel de beste manier is.
$select_object=mysql_query("SELECT * FROM object WHERE status2='actief' AND ".$sqlstring.$sql_genrid." ORDER BY id ASC LIMIT 0,1")or die(mysql_error());
Werkt opzich prima maar wat ik graag nog zou willen is dat als een volcijfer kleiner (of gelijk aan) is als vorige cijfer dat hij dan het 2e cijfer 'cijfer 1' +1 doet.
Dus dan wordt
11 -> 12 en (1 = namelijk gelijk of kleiner dan 1 dus volgcijfer wordt 2)
30 -> 34 en (0 = kleiner dan of gelijk aan 3 dus volgcijfer wordt 4)
90 -> 123 (0 = kleiner dan 9 dus wordt maar hoger dan 9 kan niet dus wordt 100, 0= kleiner dan 1 dus wordt 2, daarna is 0 kleiner dan 2 dus wordt 3)
enz.
2000 -> 2345
30000 -> 34567
400000 -> 456789
500000 -> 1234567 (567890 kan namelijk niet want dan is 0 weer kleiner dan 9)
Door bovenstaande kan hij namelijk honderden getallen (while's) overslaan...
Al die $pr dingen, gooi die in een array, loop daardoor, en per loop neem je een aantal items uit d array minder? Want nu bouw je die telkens per 1 af door manueel $prX aan elkaar te plakken, je kan op die manier je code toch al reduceren.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.