Kom ihåg mig?
Home Menu

Menu


SQl problem/fråga

Ämnesverktyg Visningsalternativ
Oläst 2009-03-21, 17:02 #1
Ixzat Ixzat är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2007
Inlägg: 9
Ixzat Ixzat är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2007
Inlägg: 9
Jag håller på att sätta upp en sida som är i princip färdig förutom att jag inte får ordning på en liten sql sak.

Jag har ett artikelsystem där inloggade användare skall kunna markera en artikel som läst, vilket gör att den aldrig mer visas för just den användaren.

Som det ser ut nu så har jag en tabell som heter "artiklar" och en som heter "lasta_artiklar".

Under artiklar har jag följande fält: id, art_txt, user_id, created.
Under lasta artiklar har jag: id, art_id, user_id.

Jag vill få ut en sql sats som gör att den listar alla artiklar förutom de som användaren har satt som lästa, dvs de som har samma art_id i "lasta_artiklar" som id i "artiklar och med samma user_id som den inloggade användaren.

Bör jag bygga om mina tabeller eller går det att lösa smidigt på något sätt?
Ixzat är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-21, 17:09 #2
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
Kod:
SELECT a.* FROM artiklar AS a LEFT JOIN lasta_artiklar AS la ON la.art_id = a.id AND la.user_id = 17 WHERE la.id IS NULL;
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-21, 17:29 #3
Ixzat Ixzat är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2007
Inlägg: 9
Ixzat Ixzat är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2007
Inlägg: 9
Super, tack så mycket!!
Ixzat är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-22, 02:45 #4
Ixzat Ixzat är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2007
Inlägg: 9
Ixzat Ixzat är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2007
Inlägg: 9
En fråga till, kan man få order by random på en sådan sql sats? Jag har provat mig fram men inte lyckats få till det. Limit får jag in, men inte random...
Ixzat är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-22, 03:42 #5
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Jag ser ingen anledning varför du ska ha user_id i artikel-tabellen.
Det räcker gott med att du lagrar user_id och art_id i lasta_artiklar-tabellen, då har du all info du behöver, du behöver inte heller ha ett eget id i lasta_artiklar-tabellen eftersom art_id och user_id tillsammans blir en unik nyckel.

user_id i artikeltabellen är en felaktig normalisering som jag ser det, id i lasta_artiklar är bara överflödig information.

Tabellerna behöver bara följande kolumner:

Kolumner i Artiklar: art_id, art_txt, created.
Kolumner i Lasta_Artiklar: art_id, user_id.
Kolumner i User: user_id.



Kod:
SELECT ** 
FROM * * artiklar
WHERE *id NOT IN(SELECT art_id FROM Lasta_artiklar WHERE *user_id = 17);
Observera den lite fiffiga användningen av en subselect som plockar fram en lista på alla art_id som användaren med user_id = 17 har läst och att den NOT som är före subselecten vänder logiken så hela SQL-satsen visar alla artiklar som användaren INTE läst tidigare....
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-22, 08:34 #6
oller oller är inte uppkopplad
Medlem
 
Reg.datum: Mar 2004
Inlägg: 51
oller oller är inte uppkopplad
Medlem
 
Reg.datum: Mar 2004
Inlägg: 51
Citat:
Originally posted by Ixzat@Mar 22 2009, 03:45
En fråga till, kan man få order by random på en sådan sql sats? Jag har provat mig fram men inte lyckats få till det. Limit får jag in, men inte random...
MySQL: ORDER BY RAND()
MSSQL: ORDER BY NEWID()

Mvh
oller är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-22, 15:01 #7
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
ConnyWesth: Det beror ju helt och hållet på vad user_id i artikel databasen är. Min gissning är att det är användaren som skapat artikeln så kan du ju inte plocka bort den.
WizKid är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 14:14.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017