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älja alla förutom en kategori

Postades av 2007-11-10 02:34:38 - Thomas Roman, i forum mysq, Tråden har 6 Kommentarer och lästs av 1345 personer

Jag har 3 tabeller:

<info>
[Movies]
ID
Title

[Categories]
ID
Category

[CategoryLinks]
ID
MovieID
CategoryID
</info>

Vill jag välja ut alla filmer från kategori X så gör jag det med:
<code>
SELECT Movies.Title FROM Movies, CategoryLinks WHERE Movies.ID = CategoryLinks.MovieID AND CategoryLinks.CategoryID = X
</code>

Nu vill jag hämta alla filmer som INTE är med i kategori X och testade:
<code>
SELECT Movies.Title FROM Movies, CategoryLinks WHERE Movies.ID = CategoryLinks.MovieID AND CategoryLinks.CategoryID <> X
</code>

Alla filmer kan ha flera kategorier och jag antar att det är det som ställer till det.

Nån som har nån lösning?

Edit:
Nu tror jag att jag fick till det med:
<code>
SELECT Title FROM Movies WHERE NOT ID IN (SELECT Movies.ID FROM Movies, CategoryLinks WHERE Movies.ID = CategoryLinks.MovieID AND CategoryLinks.CategoryID = X)
</code>

Är det rätt och är det i så fall den vettigaste lösningen?


/Thomas


Svara

Sv: Välja alla förutom en kategori

Postades av 2007-11-10 10:05:35 - Johan Djupmarker

Det är ett sätt som är väldigt lättöverskådligt. Jag tycker dock att MySQL presterar väldigt dåligt med den typen av frågor (IN med subselect). Tror att jag fått ihop en variant som jag hoppas ger samma resultat med lite bättre prestanda (vid lite större datamängder).

SELECT Movies.Title FROM
Movies LEFT JOIN
(Categories INNER JOIN CategoryLinks ON Categories.ID = CategoryLinks.CategoryID AND Categories.ID = X)
ON CategoryLinks.MovieID = Movies.ID GROUP BY Movies.Title HAVING COUNT(Categories.ID) = 0;

/Johan


Svara

Sv:Välja alla förutom en kategori

Postades av 2007-11-10 13:08:56 - Thomas Roman

Vid vilka mängder kan min kod börja bli seg? Din kod fungerar tyvärr inte, den får med filmer från kategori X.

Edit: Nu var jag lite väl snabb. Den sorterade annorlunda mot min kod så jag blev lite lurad. Efter en närmare koll så verkar den fungera också.

/Thomas


Svara

Sv: Välja alla förutom en kategori

Postades av 2007-11-10 23:12:38 - Johan Djupmarker

Helt omöjligt att säga vad som kan bli problem i just detta fallet. Jag vet dock att jag hade problem med en ganska komplex fråga med "...WHERE X IN (SELECT..." som tog runt 17 sekunder med några 10000 poster. Genom att göra motsvarande omskrivning tror jag jag landade mellan 1-2 sekunder. Har även varit med om andra situationer där IN med subselect tagit lång tid i MySQL, så den funktionaliteten verkar inte vara så väl optimerad.

/Johan


Svara

Sv:Välja alla förutom en kategori

Postades av 2008-03-22 14:18:01 - Thomas Roman

Jag har märkt nu, redan vid ca 1000 poster, att min kod börjar bli seg så jag testade din kod istället och den är i princip lika seg också. Går den att förbättra?

Jag har dock gjort en justering, istället för att Categories.ID = X ska tas bort så ska Categories.Removed = True tas bort.


/Thomas


Svara

Sv: Välja alla förutom en kategori

Postades av 2008-03-23 14:29:13 - Johan Djupmarker

Ingen aning om detta är bättre, du får testa:


SELECT Movies.Title FROM
Movies
LEFT JOIN
(SELECT MovieID FROM CategoryLinks INNER JOIN Categories ON Categories.ID = CategoryLinks.CategoryID WHERE Categories.Removed = True) AS C
ON C.MovieID = Movies.ID
WHERE C.MovieID IS NULL

Ska jag vara helt ärlig så tror jag inte det kommer göra så stor skillnad, om det ens är till det bättre. Har tyvärr inga fler idéer till problemet för för tillfället.

/Johan


Svara

Sv:Välja alla förutom en kategori

Postades av 2008-03-23 14:58:20 - Thomas Roman

Den där koden gick kalassnabbt, men samtidigt tyckte jag inte att den gamla koden gick så långsamt nu heller... så jag vet inte riktigt vad som löste problemet, men nu fungerar det i alla fall bra.
Tack!


/Thomas


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
779
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