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


Kör fast i SQL Distinct

Postades av 2008-07-10 11:41:43 - Daniel Carlsson, i forum mysq, Tråden har 8 Kommentarer och lästs av 1675 personer

Hej!

Har en tabell med städer (4 st) och en nyhetstabell med nyheter för varje stad. Vad försöker göra är att skriva ut den senaste nyheten för varje stad alltså max 4 st nyheter på sidan. Med följande kod får jag fram en nyhet för varje stad. Problemet är att den plockar ut nyheter med gamla datum . Nåt knas med sorteringen alltså

SELECT DISTINCT(nyheter.stad), nyheter.id, nyheter.titel, nyheter.texten, stad.stad FROM nyheter
LEFT JOIN stad ON stad.id=nyheter.stad GROUP BY nyheter.stad ORDER BY nyheter.datum

Vet nåt geni här hur man löser detta enklast?

Tack på förhand!
//D


Svara

Sv: Kör fast i SQL Distinct

Postades av 2008-07-10 12:53:42 - Niklas Jansson

Koden ser lite skum ut, varför har du distingvt, osv.?
Fungerar frågan alls?
Du kan ju inte ha nyheter.titel om du inte har group på den (t.ex.)...


Jag skulle skriva frågan som först:
SELECT stad, MAX(datum) FROM nyheter GROUP BY stad

för att få ut rätt datum och städer, och sen
SELECT nyheter.id, nyheter.titel, nyheter.texten, stad.stad FROM
((SELECT stad, MAX(datum) AS datum FROM nyheter GROUP BY stad) AS N
LEFT JOIN nyheter ON nyheter.stad = N.stad AND nyheter.datum = N.datum)
LEFT JOIN stad ON stad.id=nyheter.stad

för att använda just de städerna. Det kan bli lite enklare att se vad man gör om man som mellansteg hämtar ut ID:na

SELECT ID FROM nyheter RIGHT JOIN (SELECT stad, MAX(datum) FROM nyheter GROUP BY stad) AS N
ON N.stad = nyheter.stad AND nyheter.datum = N.datum

Det kan du sen lägga i en view (eller "stored query" om du använder Access).


Svara

Sv: Kör fast i SQL Distinct

Postades av 2008-07-10 12:55:34 - Samuel Adolfsson

Nåt sånt här kanske (obs helt otestat):

select *
from nyheter n
join
(
select stad, max(id) as nid -- ta ut senaste per stad, alt max(datum)
from nyheter
group by stad
) tmp on tmp.nid = n.id and tmp.stad = n.stad
JOIN stad s ON s.id=n.stad
order by n.datum


Svara

Sv:Kör fast i SQL Distinct

Postades av 2008-07-10 14:28:20 - Johan Djupmarker

<b>Du kan ju inte ha nyheter.titel om du inte har group på den (t.ex.)... </b>

MySQL godkänner det vill jag minnas, verkar ta vilket värde som helst. Helt vansinnigt att man inte får syntaxfel på det tycker jag då man väldigt ofta missat en GROUP BY i det läget.

/Johan


Svara

Sv: Kör fast i SQL Distinct

Postades av 2008-07-10 22:13:19 - Per Persson

<b>MySQL godkänner det vill jag minnas</b>

Korrekt.

Jag kan delvis hålla med om att MySQL borde - om inte ge fel - så åtminstone varna när det inte finns en entydig rad att välja vid GROUP BY. Däremot tycker jag inte att man alltid skall behöva köra GROUP BY på varje fält som inte är en gruppfunktion. Om man har t.ex.

SELECT ProductId, ProductName, COUNT(*)
FROM Product 
INNER JOIN Orderline 
    USING (ProductId)
GROUP BY ProductId

där ProductId är primärnyckel i tabellen Product, är ju ProductName entydigt given för varje rad.


Svara

Sv:Kör fast i SQL Distinct

Postades av 2008-07-10 22:24:24 - Niklas Jansson

Vad är det som garanterar att ProductName är entydig per rad?
Du borde väl rimligtvis ställa ett uniqueness-constraint på ProductName också då?

Då skulle jag kunna köpa det.


Svara

Sv: Kör fast i SQL Distinct

Postades av 2008-07-10 23:26:07 - Per Persson

<b>Vad är det som garanterar att ProductName är entydig per rad?</b>

Jag glömde skriva att ProductName ligger i tabellen Product.

Eftersom ProductId är primärnyckel i Product kan det inte finnas flera ProductName för samma ProductId. Så när vi kör GROUP BY ProductId finns det ingen oklarhet om vilket värde ProductName kommer att få i varje rad av resultatet.


Svara

Sv:Kör fast i SQL Distinct

Postades av 2008-07-11 10:04:18 - Daniel Carlsson

Verkar funka fint! :D

Tack så mycket för hjälpen!


Svara

Sv: Kör fast i SQL Distinct

Postades av 2008-07-11 10:49:48 - Jonas Sjöblom

Det kan vara en bra idé att göra en specifik tabell för städer (förutsatt att du kan ändra på tabellerna), det borde underlätta för framtiden och gör det mycket enklare om du t.ex. vill ha en lista över möjliga val av stad.

<code>
ID Stad
1 Stockholm
2 Helsingfors
3 Paris
</code>
och sen länkar du ihop tabellerna baserat på ID med en inner join eller liknande.


Svara

Nyligen

  • 17:54 Vegastars New Zealand
  • 16:56 Verde Casino Danmark
  • 13:54 Vegastars: Top Australian Online C
  • 21:28 Chicken Road Casino Game
  • 21:21 1xBet Promo Code 2025
  • 18:37 Remove the bumper in AUDI
  • 15:35 Chicken road crash game
  • 21:41 Automotive Services UK

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 570 961
27 965
271 783
616
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