Yawa Skrevet 11. september 2010 Del Skrevet 11. september 2010 Hvordan er sql-spørringer lignende finn.no, rubrikk.no, zett.no etc. satt opp? Altså hvis man navigerer seg rundt inne på boligannonser for eksempel, så kan foreta endel valgfrie valg - som lokalisering, pris, eierform osv. Jeg prøver å få til en lignende spørre-løsning hvor brukere kan angi en eller flere kriterier for å begrense resultatene. De kan angi fylke/kommune, kategori og type. Men hvordan setter jeg opp en fleksibel og effektiv spørring til dette - som det også vil være lett å legge til nye kriterier med tiden? Informasjonen er lagret i disse tabellene hvor det er klubbNr som er identisk ID for sammenkjøring: > klubb > klubb_adresse > klubb_kategori > klubb_type Det som kan skje er... : > ... en bruker velger kun ett av kriteriene > ... en bruker velger 2 eller flere av kriteriene har satt opp en lang sprintf (); spørring, men sitter fast på WHERE noen som kan komme med noe tips her? Lenke til kommentar
Thomas. Skrevet 11. september 2010 Del Skrevet 11. september 2010 (endret) edit: sjekk svarene under heller.. Endret 11. september 2010 av Thomas. Lenke til kommentar
JcV Skrevet 11. september 2010 Del Skrevet 11. september 2010 Disse store sitene bruker nok ikke en relasjon-base men heller memchaced eller noe lig. Men hvis du skal bare se på hvordan man kan gjøre dette med en sql. Hadde jeg googla normalisering av base, indekering, joins og teknikker hvor du får innsyn i hvordan basen leser sql settningen din( hvis du bruker mysql sjekk ut explain extended) Lenke til kommentar
Jankee Skrevet 11. september 2010 Del Skrevet 11. september 2010 Kan sei litt om finn.no sidan eg kjenner litt til den teknologiske plattformen der. Dei "spørringene" du spør etter finnes ikkje (dei blei pensjonert for fleire år sidan) Det som gjer desse avgrensingene er ein søkemotor (nærmare bestemt FAST) Avgrensninga kalles fasetering og er ein mykje meir effektiv informasjonsgjenfinningsmetodikk enn reine databaseoppslag. Derimot når du går inn på ei annonse er det eit databaseoppslag for det objektet. Om du har lyst til å gjere meir det same så kan Apache Solr dowload vere noko å sjekke ut. Det leveres med php-klientkode i distribusjonen viss eg ikkje husker feil. Info om denne søkemotoren finn du her: http://lucene.apache.org/solr/ Lenke til kommentar
Yawa Skrevet 11. september 2010 Forfatter Del Skrevet 11. september 2010 (endret) huff da - detta så egentlig meget komplisert ut... menne - all data lagres i vanlige databasetabeller, sant? men ved søk/begrensning av resultater så skrives de først til en XML-fil for visning? går dette under det som heter "Faceted Navigation"? Sånn som mittoppdrag.no - bruker det noe av det samme opplegget for å begrense området, yrke etc.? EDIT: tatt bort en ufungerende kode og satt opp en fungerende nedenfor Etter endel timer med studering og utprøving av foskjellige spørrings-variasjoner kom jeg endelig frem til en fungerende løsning. EDIT[2]: basert på litt undersøking fant jeg ut av at sprintf(); egentlig ikke var nødvendig + at i mitt tilfelle ble det bare unødvendig kompliserte spørringer... Så endret ytterligere en gang... Igjen - Du har helt sikkert helt rett i at solr er en mye mer effektiv/riktig måte å gjøre dette på. Jeg får forsøke å ta meg tid til å studere det... vel - slik ble min "endelige?" løsning - så langt (m/kommentarer som forhåpentligvis forklarer litt): <?php #### $_GET['variables'] #### $_C = $_GET['fylke']; $_M = $_GET['kommune']; $_c = $_GET['kategori']; $_r = $_GET['vurdering']; $_f = $_GET['form']; function fetchResults ($_C,$_M , $_c,$_r$_f) { if (isset($_C)) { $adressArea = mysql_real_escape_string($_C); $sqlArea = ' AND adr.adressCounty = "'.$adressArea.'"'; } // fylke elseif (isset($_M)) { $adressArea = mysql_real_escape_string($_M); $sqlArea = ' AND adr.adressMunicipality = "'.$adressArea.'"'; } // kommune if (isset($_c)) { $prefCat_sub = mysql_real_escape_string($_c); $sqlCat = ' AND c.prefCat_sub LIKE "%'.$prefCat_sub.'%"'; } // kategori if (isset($_r)) { $businessRate = mysql_real_escape_string($_r); $sqlRat = ' AND B.businessRate = "'.$businessRate.'"'; } // vurdering if (isset($_f)) { $businessForm = mysql_real_escape_string($_f); $sqlForm = ' AND B.businessForm = "'.$businessForm.'"'; } // type/form $res = mysql_query (' SELECT * FROM (business B , business_adresses adr , business_prefCategories c , business_contacts cont) WHERE cont.bc_orgNr = B.orgNr'. $sqlArea . $sqlCat . $sqlRat . $sqlForm ); // ... videre kommer en while();-loop \\ ?> Vel - det ble min løsning så langt. Den ser kansje tungvind ut, og er kansje ikke så effektiv, men den fungerer hvertfall. Kom gjerne med noen innvendinger til dette oppsettet og kom gjerne med tips til mer "riktige" løsninger hvis dere mener det er helt uhørt å gjøre det på denne måten... Endret 12. september 2010 av Yawa Lenke til kommentar
Jankee Skrevet 12. september 2010 Del Skrevet 12. september 2010 All data lagres i vanlige databaser ja. Solr er egentleg ikkje så vanskeleg, det du trenger å forholde deg til i starten er xmlen du sender via http for å indeksere dokumentene. så indekserer du databaseIDen til kvar "side/klubb...." og bruker denne til å finne fram i databasen til det objektet du er ute etter. Søkemotoren er dokumentbasert utan relasjoner mellom dokumentene. Vil anbefale deg å kikke litt på solr då den fungerer veldig godt til akkurat det du er ute etter. Bruk eksemplene som ligger vedlagt og leik deg litt med den, du kjem til å få nytte av den. Er det noko du lurer på så kan eg prøve å svare på spørsmåla, anten via pm eller i tråden. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå