login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Makkelijkere manier voor 250 if-statements???

Offline Appie_Dijk - 17/10/2011 22:22
Avatar van Appie_DijkLid Hallo iedereen,

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)

  1. <?
  2. //ZOEK CRITERIA PRIOTITEITEN INSTELLEN
  3. $pr1 = "prijs>='". $prijs_laag ."' AND prijs<='". $prijs_hoog ."' AND "; //PRIJS
  4. $pr2 = "plaats='". $laatst_bekeken_woning_plaats ."' AND "; //PLAATS
  5. $pr3 = "woonoppervlak>='". $laatst_bekeken_woning_woonoppervlak_laag ."' AND woonoppervlak<='". $laatst_bekeken_woning_woonoppervlak_hoog ."' AND "; //WOONOPPERVLAK
  6. ?>


Daarna zoek ik naar het object welke het beste matches, momenteel doe ik dat zo:

  1. //ALLE (9) PRIORITEITEN MATCHEN
  2. $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());
  3. $referenties = mysql_num_rows($select_object);
  4. if ($referenties==0)
  5. {
  6. //8 PRIORITEITEN MATCHEN
  7. //-prioriteit 9
  8. $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());
  9. $referenties = mysql_num_rows($select_object);
  10. if ($referenties==0)
  11. {
  12. //-prioriteit 8
  13. $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());
  14. $referenties = mysql_num_rows($select_object);
  15. if ($referenties==0)
  16. {
  17. //ENZOVOORT...
  18. //DAARNA 7 PRIORITEITEN MATCHEN
  19. //-prioriteit 9 & 8
  20. $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());
  21. $referenties = mysql_num_rows($select_object);
  22. if ($referenties==0)
  23. {
  24. //-prioriteit 9 & 7
  25. $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());
  26. $referenties = mysql_num_rows($select_object);
  27. if ($referenties==0)
  28. {
  29. //ENZOVOORT
  30. //DAARNA EVT 6, 5, 4, 3, 2, 1 prioriteiten matchen


Het probleem is dat dit een erg lange code wordt en waar je afsluiten met vele " }" (tientallen, (einde ifs).

Is dit niet makkelijker te maken zodat ik evt. later ook nog makkelijk extra prioriteiten kan toevoegen???

Alvast bedankt voor jullie reactie!

Mvg. Albert

8 antwoorden

Gesponsorde links
Offline Ontani - 17/10/2011 22:44
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
ik zie contstant dezelfde query vorbij komen... zie het nut vn de if's niet.
Offline Abbas - 17/10/2011 23:32
Avatar van Abbas Gouden medaille

Crew .NET
@Ontani: in elke query zijn de parameters een beetje anders.. 
Offline Ontani - 18/10/2011 08:41
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Hmmm kon met de tablet blijkbaar niet scrollen in die code vensters. Dat stopte bij $pr1. Vandaar dat ik geen verschil zag 
Offline Appie_Dijk - 18/10/2011 09:44
Avatar van Appie_Dijk Lid klopt inderdaad dat er enkele parameters aldoor een beetje anders zijn... maar weet iemand hoe bovenstaand probleem kan oplossen??
Offline larssy1 - 18/10/2011 09:53
Avatar van larssy1 MySQL beginner Ik denk dat die vele if's niet te vermijden zijn.

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.
Offline Appie_Dijk - 18/10/2011 13:42 (laatste wijziging 18/10/2011 14:10)
Avatar van Appie_Dijk Lid Heb nu dit:

  1. <?php
  2. $string = 0;
  3.  
  4. while ($string <= 123456789)
  5. {
  6. $sqlstring = "(status='te koop' OR status='te huur') AND ";
  7.  
  8. if (strrpos ($string, "9") === FALSE) { $sqlstring .= $pr9; }
  9. if (strrpos ($string, "8") === FALSE) { $sqlstring .= $pr8; }
  10. if (strrpos ($string, "7") === FALSE) { $sqlstring .= $pr7; }
  11. if (strrpos ($string, "6") === FALSE) { $sqlstring .= $pr6; }
  12. if (strrpos ($string, "5") === FALSE) { $sqlstring .= $pr5; }
  13. if (strrpos ($string, "4") === FALSE) { $sqlstring .= $pr4; }
  14. if (strrpos ($string, "3") === FALSE) { $sqlstring .= $pr3; }
  15. if (strrpos ($string, "2") === FALSE) { $sqlstring .= $pr2; }
  16. if (strrpos ($string, "1") === FALSE) { $sqlstring .= $pr1; }
  17. if (strrpos ($string, "0") === FALSE) { $sqlstring .= $pr0; }
  18.  
  19. echo $string ."<br>";
  20.  
  21. $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());
  22. $referenties = mysql_num_rows($select_object);
  23. if ($referenties==0)
  24. { $string++; } else { $string = 999999999; }
  25. }
  26. ?>


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...
Offline Ontani - 18/10/2011 14:53
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Even duidelijker uitleggen wat de bedoeling is van dat laatste en wat je daar precies mee bedoelt...
Offline Maarten - 19/10/2011 11:33
Avatar van Maarten Erelid 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.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.203s