Gå til innhold

sql-spørringer, som finn, zett, rubrikk etc.


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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 av Yawa
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...