Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Väldigt svår SQLsats

Postades av 2009-03-06 21:04:38 - Jonas Sjöblom, i forum mysq, Tråden har 3 Kommentarer och lästs av 1453 personer

Börjar undra ifall det här ens är möjligt.

Har 2 tabeller:
Books
BookID
BookName

Relations
BookId1
BookId2
Strength


Tabellen Relations innehåller referenser till tabellen book (BookId1/2) och strength anger hur mycket de har gemensamt (siffra, 0-10).

Nu är det så att användaren ska kunna bestämma 5 böcker i prioritetsordning och få upp en lista med de mest liknande böckerna (stark relation). Första boken som anges ska också ha större inflytande än de andra och sista boken ska ha lägst inflyande.

Om jag selectade dem en och en skulle det se ut ungefär såhär:
<code>
select b.BookName from Books b
INNER JOIN Relations r ON r.BookId1 = b.BookId OR r.BookId2 = b.BookId
ORDER BY Strength ASC
</code>
Är inte säker på ifall man kan använda OR i en join, har aldrig testat men det behövs något åt det hållet eftersom jag inte vet ifall det matchande IDt ligger i BookId1 eller BookId2, kan dock endast ligga i en av dem.

Men det riktiga problemet är att få med alla 5 sökningarna i en och samma lista. Order by måste justeras till något i stil med
ORDER BY (Strength*1.5) ASC - för första boken som angavs
ORDER BY (Strength*1.4) ASC - för andra boken som angavs
osv...

Så hur ska jag lösa detta? Projektet är bara på planeringsstadiet så det är fullt möjligt att komma med förslag på ändringar i databasstrukturen ifall det behövs.

Jag hoppas att jag lyckats göra mig förstådd.


Svara

Sv: Väldigt svår SQLsats

Postades av 2009-03-06 21:36:36 - Martin Adrian

Antag att du har de valda böckerna i en tabell SelectedBooks och i denna tabell har du även en viktningsfaktor som säger hur mycket strength skall ökas för respektive bok.

BookId Factor
1 1.5
2 1.4
...

Om du då gör så här:

SELECT r.BookId1 AS BookId, r.Strength*s.Factor AS RelativeStrength
FROM SelectedBooks s ON Relations r ON r.BookId2 = s.BookId
UNION ALL
SELECT r.Book2Id AS BookId, r.Strength*s.Factor AS RelativeStrength
FROM SelectedBooks s ON Relations r ON r.BookId1 = s.BookId

Så får du en lista med alla relaterade böcker och deras vikt (vissa kommer med flera gånger).
Sen är det bara att sortera och välja hur många du vill ha typ

SELECT TOP 10 Distinct(BookId)
FROM (uttycket ovan)
ORDER BY RelativeStrength DESC


Svara

Sv:Väldigt svår SQLsats

Postades av 2009-03-07 10:26:19 - Jonas Sjöblom

Tack! Jag testade sqlsatsen du skrev och det verkar fungera utmärkt nu efter en del modifikationer!

Det jag funderar på nu är tabellen med faktorer, den måste ju skrivas om varje gång en sökning görs så hur gör man det här bäst?

1. Lägg till en kolumn, SearchID
BookId Factor SearchID
1 1.5 5
2 1.4 5
....

2. Skapa en temporär tabell för varje sökning

3. Cleara tabellen och lägg in de nya värdena vid varje sökning.

Eller något annat? Hur brukar man lösa sånt här?


Svara

Sv: Väldigt svår SQLsats

Postades av 2009-03-08 18:17:07 - Jonas Sjöblom

Såg nu att man kan skapa temporära tabeller utan risk för konflikter.

Tack för all hjälp Martin :)


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 153
27 952
271 704
2 033
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies