Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2010-10-27, 09:36
  #1
Medlem
Tjena!

Jag har suttit i flera veckor för att försöka designa en bra databas, som kan göra det jag vill.. har fått till något som fungerar, men som kanske inte är det smidigaste.

såhär skulle jag vilja att det skulle vara. Jag har 3 tabeller i en databas, Företag, Bransch och Synonym. Under bransch ligger alla branscher med en gång, ungefär som en kategori till företaget. under bransch ligger också en kolumn Rank med, detta återkommer jag till senare. Varje bransch har flera olika synonymer, under Synonym ska även där kolumnen Rank ligga med, och vara kopplad till en bransch. Jag vill även ha med så man kan lägga till flera sökord separat. Kanske i en ny databas? alternativt under bransch.

Om någon söker på en synonym, vill jag att företagen som tillhör branschen som synonymen tillhör ska visas, men dem ska rankas efter synonym_rank.

Om någon söker på en bransch, vill jag att företagen som tillhör bransch ska visas, men rankas efter bransch_rank.

Om någon söker på ett sökord, vill jag att företagen som tillhör det sökordet visas, men rankas efter bransch_rank.

Då till frågorna:

1. Hur kopplar jag så att man endast behöver skriva ut alla branscher en gång, men så man vet vilket företag som tillhör olika branscher.

2. hur kopplar jag så att synonymer sammansätts med branscher, men rankas annorlunda.

3. hur kan jag lägga till extra sökord, men så att de rankas som bransch.

4. Hur kan jag göra allt detta i en enda sök?


så som jag har gjort idag, så har jag bara 2 tabeller.

1. Företag
foretag_id, foretagsnamn, adress etc..

2. Bransch, sökord + synonym.

bransch_id, kategori, ord, rank


där varje företag har 3 olika kategorier i Bransch. kategorierna är : bransch, sökord och synonym.
under kolumnen ord skriver jag ut alla de ord som tillhör respektive kategori, och sedan väljer jag olika rank på dessa.

Som ni säkert ser så blir det 3 rader för varje företag, och har man många företag så blir det väldigt många rader.

När jag sedan söker kopplar jag ihop dessa med inner join och concat.


Hur kan man lösa detta enklare? Ska jag förklara något tydligare så säg till, Vore jättesnällt om någon kunde hjälpa mig!
Citera
2010-10-28, 05:07
  #2
Medlem
dethalvabarnets avatar
En till tabell som heter något i stil med
BranchList

företags_id bransch_id


och så join och group by, etcetera ad infinitum
Citera
2010-10-28, 10:41
  #3
Medlem
Citat:
Ursprungligen postat av dethalvabarnet
En till tabell som heter något i stil med
BranchList

företags_id bransch_id


och så join och group by, etcetera ad infinitum


hur fungerar det med synonymer?

och vad är ad infinitum?
Citera
2010-10-28, 19:23
  #4
Medlem
dethalvabarnets avatar
En till tabell för synonymer då innehållande två kolumner som är foreign keys till de som är synonymer då.

"fortsättning i all evighet" eller någonting liknande
Citera
2010-10-29, 10:23
  #5
Medlem
Citat:
Ursprungligen postat av dethalvabarnet
En till tabell för synonymer då innehållande två kolumner som är foreign keys till de som är synonymer då.

"fortsättning i all evighet" eller någonting liknande


Kopplar jag ihop dem med join då med eller går det automatiskt?

hur ser jag då vilken tabell ordet jag får tillhör?
Citera
2010-10-29, 14:53
  #6
Medlem
Citat:
Ursprungligen postat av leunar
Kopplar jag ihop dem med join då med eller går det automatiskt?

hur ser jag då vilken tabell ordet jag får tillhör?


Om vi säger att jag skulle joina två tabeller som har en kolumn som heter samma, kommer kolumnen från den tabellen som informationen jag söker efter att prioriteras? eller hur blir det?

alltså,

bransch, rank

synonym, rank

om min sökning träffar på ett ord i inner joinen som finns i synonym, kommer synonymranken att prioriteras?
Citera
2010-10-29, 16:03
  #7
Medlem
Okej så har gjort ett exempel nu..

I första spoilern har jag 4 tabeller till databasen test (phpmyadmin)


sedan har jag en php sida, testjoin.php


Nu vill jag åstadkomma att om jag skriver in i variabeln $sokord att jag vill söka på Lakare (har skrivit branscher utan åäö) så ska rank-kolumnen tas från Branschlist, men om jag söker på tex Akut, så ska rank-kolumnen tas från synonym istället.


Hur fixar jag detta? för nu tar den bara rank från branschlist oavsett.
Citera
2010-10-29, 17:09
  #8
Medlem
dethalvabarnets avatar
Tre queries av vilken endast två körs.
Första är väldigt liten och letar bara efter en träff.
Beroende på om den första träffar så avgör den vilken den andra queryn blir.
Detta är svaret som du vill ha.

Svaret du inte vill ha:
Gillar dock inte riktigt uppbyggnaden av tabeller du gjort riktigt.
Och slå upp synonym på wikipedia. Det är inte ett ord utan endast en länk mellan två ord.

Tänk på att strukturen du gör behöver vara effektiv.
Citera
2010-10-29, 19:46
  #9
Medlem
Citat:
Ursprungligen postat av dethalvabarnet
Tre queries av vilken endast två körs.
Första är väldigt liten och letar bara efter en träff.
Beroende på om den första träffar så avgör den vilken den andra queryn blir.
Detta är svaret som du vill ha.

Svaret du inte vill ha:
Gillar dock inte riktigt uppbyggnaden av tabeller du gjort riktigt.
Och slå upp synonym på wikipedia. Det är inte ett ord utan endast en länk mellan två ord.

Tänk på att strukturen du gör behöver vara effektiv.

Blir det lika effektivt med två stycken queries då?
eller effektivare?

Jag slängde bara ihop det så som jag trodde du menade där uppe?

skulle du kunna ge ett exempel på hur du skulle konstruerat databasen?


EDIT:

Sen förstår jag inte hur jag kan lösa det med 3 queries?
så som jag antog att du mena så skulle jag söka om ordet var en synonym eller en bransch,
men jag vill att båda ska finnas med, bara att dem ska rankas olika
__________________
Senast redigerad av leunar 2010-10-29 kl. 19:59.
Citera
2010-10-29, 21:59
  #10
Medlem
dethalvabarnets avatar
Det var en ide att lösa det på ditt sätt trodde jag.
__________________
Senast redigerad av dethalvabarnet 2010-10-29 kl. 22:23.
Citera
2010-10-30, 10:33
  #11
Medlem
Citat:
Ursprungligen postat av dethalvabarnet
Det var en ide att lösa det på ditt sätt trodde jag.

Kan jag inte få lite hjälp istället?
Citera
2010-10-30, 16:07
  #12
Medlem
dethalvabarnets avatar
Med vad? Jag kommer inte designa din databas bara för att du frågar om det.

Du kan ha en fristående rankningstabell där du rankar branscher högre än nyckelord(~synonymer~) men jag tycker det inte är effektivt, rankning borde baseras på sorts data som helst redan finns i databasen och bör vara logik i själva query:en.

Vad baserar du rankingen på?
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback