WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hjälp med SQL-sats (https://www.wn.se/forum/showthread.php?t=29272)

xarph 2008-05-13 12:30

Hej!

Jag har en databasstruktur som ser ut såhär:

Kod:

blogs (här ligger information om alla bloggarna)
- id
- name
- url
- feedUrl

bevakningar (knyter samman en användare med en blogg):
- id
- blog_id
- user_id
- usercategory_id

notifications: (posts från dom olika bloggarna)
- id
- title
- url
- date
- excerpt
- imageurl
- readed (växlar mellan 0/1) beroende om man har läst det eller inte.

users:
- id
- name
- password
- mail

usercategories: (Personliga kategorier för varje användare)
- id
- name
- user_id

Det jag behöver hjälp med är att skapa en SQL-sats som på smidigast sätt hämtar alla posts (notifications) från bloggen/bloggarna som är kopplad till en vald användarkategorin (usercategories) och sorterar sedan postsen efter datumet (date). Varje användare har olika kategorier, så det är för en specifik användare...

Dom personliga kategorierna ligger i tabellen 'usercategories' och är kopplad till tabellen 'bevakningar' via kolumnen usercategory_id

Antar att jag måste använda en Inner Join, men får inte rätt på det.

En användare ska alltså kunna skapa personliga kategorier som dom kan lägga till olika bloggar i. T.ex. om man vill ha dom bloggarna man följer mest .. så skapar man en kategori vid namn typ "VIP" och lägger till bloggarna i den kategorin.

Problemet här är att hämta alla posts från den personliga kategorin.

Någon som har en aning på hur man kan lösa detta?

Hoppas det inte blev allt för flummigt nu.

Magnus_A 2008-05-13 13:57

Hur knyter du ihop notifications och blogs?

Alex 2008-05-13 13:59

Var är relationen mellan notifications och blogs?

xarph 2008-05-13 14:37

Tack för snabbt svar.

Glömde skriva till ett par kolumner i notifications-tabellen, ber om ursäkt.

Såhär ser strukturen för notifications ut:

Kod:

notifications: (posts från dom olika bloggarna)
- id
- title
- url
- user_id
- blog_id
- date
- excerpt
- imageurl
- readed (växlar mellan 0/1) beroende om man har läst det eller inte.

Tack.

MMC 2008-05-13 15:02

Jag tycker att din struktur verkar aningen spretig, men jag gör ett snabbt, otestat försök:

SELECT * FROM notifications WHERE blog_id IN (SELECT blog_id FROM bevakningar WHERE usercategory_id = ?) ORDER BY date DESC

Magnus_A 2008-05-13 17:17

select not.id, not.title, not.url (...) from notifications not, bevakningar bev
where
bev.usercategory_id=valt värde and
bev.blog_id=not.blog_id
förutsatt att varje användare har globalt unika kategorier för sina bloggar. Annars får man lägga till ett till kriterium på användare.

xarph 2008-05-13 18:04

Citat:

Originally posted by Magnus_A@May 13 2008, 17:17
select not.id, not.title, not.url (...) from notifications not, bevakningar bev
where
bev.usercategory_id=valt värde and
bev.blog_id=not.blog_id
förutsatt att varje användare har globalt unika kategorier för sina bloggar. Annars får man lägga till ett till kriterium på användare.

Tack, det fungerade alldeles utmärkt!

Jag la till: AND notifications.user_id = '{$user_id}' ORDER BY date DESC

Tack återigen! :D

xarph 2008-05-26 16:28

Jag väcker liv i tråden igen på grund av att jag har "fastnat" (igen).

Jag behöver hjälp med att ordna ihop en SQL-sats som på snabbast sätt kollar antalet prenumeranter till bloggarna och sedan sorterar dom efter flest prenumeranter först.

Typ:

1. Rolles blogg, 25 prenumeranter
2. Kalles blogg, 23 prenumeranter
3. LOLs blogg, 20 prenumeranter
4. Johans sliskiga mysterium, 20 prenumeranter
5. Hitlers porrblogg, 15 prenumeranter
...

etc

Databasdesignen har ni ovan :)

Tack på förhand.

MMC 2008-05-26 17:52

Jag kanske missförstår vad du vill åstadkomma, men räcker inte COUNT(*) ... GROUP BY? Vad jag kan se från ditt databasschema så borde:

Kod:

SELECT blog_id, COUNT(*) AS num FROM bevakningar GROUP BY blog_id
ge dig informationen du är ute efter (du får så klart plocka in bloggnamn etc. från bloggtabellen)


Alla tider är GMT +2. Klockan är nu 02:28.

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