webForumDet fria alternativet

Välja kategorier från referenstabell - MySQL

Databaser & SQL

4 svar · 368 visningar · startad av echoSwe

Medlem sedan nov. 20041 189 inlägg
Frågan#1

Tjabba

Har programmerat grunden till en blog, som de på ASP.Net forumet är fullt medvetna om. I alla fall så tänkte jag mig att i grundutförandet så skulle det vara möjligt att välja många kategorier för varje post, och i och med att jag vill använda relationsdatabaser istället för att lägga in en enda post 20 grr med små ändringar, så valde jag att lägga en tabell: blog_entries som har ett fält: entryId.

Sedan har jag en referenstabell: entries2cats, som innehåller tre kolumner: id, entryId och catId

Sedan har jag en tabell över kategorierna: blog_cats, med kolumner - typ "catId" och "name".

Jag vill ställa en fråga liknande den här:

SELECT blog_entries.title, blog_entries.entry, blog_entries.date, blog_entries.entryId, blog_entries.authorId, 
  blog_authors.name AS author,
  COUNT(blog_comments.CommentID) AS nbrComments 
FROM blog_entries 
INNER JOIN blog_authors ON blog_entries.authorId = blog_authors.authorId 
/* here it would be great to add some checkup on what categories this entry is in and concenate a string with them*/
LEFT OUTER JOIN blog_comments ON blog_entries.entryId = blog_comments.entryId 
GROUP BY blog_entries.Title, blog_entries.entryId, blog_entries.date, author 
ORDER BY Date DESC;

och jag vill göra exakt det som kommentaren säger - skapa en kolumn i det returnerade DataTable (eller recordset-et) som innehåller till exempel:

Categories
-----------
Design, SQL
ASP.Net
Life
Rantings
Life, Rantings

Hur skriver jag mitt SQL uttryck?

Edit: När jag sedan ska lägga till ett till blog-inlägg - ska jag skriva en INSERT fråga som är skitlång då eller ska jag bara använda mig av ett par anrop? Det kanske blir enklare om jag gör två anrop? Kan man ens lägga till i flera tabeller samtidigt med INSERT?

Medlem sedan dec. 200012 464 inlägg
#2
SELECT blog_entries.title, blog_entries.entry, blog_entries.date, blog_entries.entryId, blog_entries.authorId, 
  blog_authors.name AS author,
  COUNT(blog_comments.CommentID) AS nbrComments ,
  group_concat(blog_cats.name)
FROM blog_entries 
INNER JOIN blog_authors 
  ON blog_entries.authorId = blog_authors.authorId 
  inner join entries2cats on blog_entries.entryid = entries2cats.entryid
  inner join blog_cats on entries2cats.catid = blog_cats.catid
LEFT OUTER JOIN blog_comments ON blog_entries.entryId = blog_comments.entryId 
GROUP BY blog_entries.Title, blog_entries.entryId, blog_entries.date, author 
ORDER BY Date DESC

Sedan har jag en referenstabell: entries2cats, som innehåller tre kolumner: id, entryId och catId

Det finns ingen anledning att ha kolumnen id.

Medlem sedan nov. 20041 189 inlägg
#3

Rakt på sak, tack så mycket. :D

En liten sak till bara - När jag sedan ska lägga till ett till blog-inlägg - ska jag skriva en INSERT fråga som är skitlång då eller ska jag bara använda mig av ett par anrop? Det kanske blir enklare om jag gör två anrop? Kan man ens lägga till i flera tabeller samtidigt med INSERT?

Och sedan undrar jag också hur jag lägger till ett mellanrum mellan varje kategori (space)?

Medlem sedan dec. 200012 464 inlägg
#4
group_concat(a separator ' ')

har jag för mig. Kolla i manualen annars.

Använd en insert för varje tabell.

Kan man ens lägga till i flera tabeller samtidigt med INSERT?

Nej.

Medlem sedan nov. 20041 189 inlägg
#5

Det stämde mkt bra det. Tack för hjälpen!

261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)