webForumDet fria alternativet

Söka efter alla inlägg av användare (SQL)

Databaser & SQL

8 svar · 136 visningar · startad av Pace

Medlem sedan juni 20019 024 inlägg
Frågan#1

Okej, vi skippar dösnackat! ;)

1. Detta är ett forum.
2 Vill söka efter alla inlägg som en användare gjort.
3. Har tre tabeller:
* PaceBoard_Topics - Trådens första inlägg
* PaceBoard_Members - Alla anävndare
* PaceBoard_Replys - Inläggen i en viss tråd
4. Vill söka igenom dessa tre tabeller där både PaceBoard_Topics och PaceBoard_Replys kan innehålla inlägg som använaren gjort.

Har följande kod som söker igenom ett PaceBoard_Topics och _Replys efter en söksträng:

SELECT
PaceBoard_Forums.Forum_ID, PaceBoard_Forums.F_Name, PaceBoard_Topics.Topic_ID,
PaceBoard_Topics.T_Subject, PaceBoard_Topics.T_Last_Post, PaceBoard_Members.M_Name

FROM ((PaceBoard_Forums
LEFT JOIN PaceBoard_Topics ON PaceBoard_Forums.Forum_ID = PaceBoard_Topics.Forum_id)
LEFT JOIN PaceBoard_Replys ON PaceBoard_Topics.Topic_ID = PaceBoard_Replys.Topic_ID)
LEFT JOIN PaceBoard_Members ON PaceBoard_Topics.T_Originator = PaceBoard_Members.Member_ID

WHERE (PaceBoard_Forums.F_Description LIKE '%pace%'
OR PaceBoard_Replys.R_Message LIKE '%pace%'
OR PaceBoard_Topics.T_Message LIKE '%pace%'
OR PaceBoard_Topics.T_Subject LIKE '%pace%')

[Redigerat av Pace den 16 okt 2001]

Medlem sedan dec. 200012 464 inlägg
#2

Gör en fråga som söker i topics och en som söker i replys (replies!) och lägg ihop dessa med en union.

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 20019 024 inlägg
#3

Okej, ska testa det!

(replies!)

Jo jag vet, men tabellerna hette _Reply och _Topic, men de var ju pluralis inlägg i dem så jag la på ett 'S' slutet. ;)

------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."

[Redigerat av Pace den 16 okt 2001]

Medlem sedan juni 20019 024 inlägg
#4

Hmmm, har lite svårigheter, det tycks gå över mitt förstånd.

Om jag söker efter exempelvis "Pace" i sökfältet, hur ska jag få PaceBoard_Members.M_Name = 'pace' att söka efter exempelvis användar ID 7?

SELECT PaceBoard_Forums.Forum_ID, PaceBoard_Forums.F_Name, PaceBoard_Topics.Topic_ID, PaceBoard_Topics.T_Subject, PaceBoard_Topics.T_Last_Post, PaceBoard_Members.M_Name

FROM ((PaceBoard_Forums LEFT JOIN PaceBoard_Topics ON PaceBoard_Forums.Forum_ID = PaceBoard_Topics.Forum_id)
LEFT JOIN PaceBoard_Replys ON PaceBoard_Topics.Topic_ID = PaceBoard_Replys.Topic_ID)
LEFT JOIN PaceBoard_Members ON PaceBoard_Topics.T_Originator = PaceBoard_Members.Member_ID

UNION SELECT PaceBoard_Replys.* FROM (PaceBoard_Replys LEFT JOIN PaceBoard_Topics ON PaceBoard_Replys.Topic_ID = PaceBoard_Topics.Topic_ID)
WHERE PaceBoard_Members.M_Name = 'pace'

------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."

Medlem sedan dec. 200012 464 inlägg
#5

Nu blir jag lite osäker på din datamodell.

Exakt vad ligger i tabellen topics?

SELECT PaceBoard_Forums.Forum_ID, 
       PaceBoard_Forums.F_Name, 
       PaceBoard_Topics.Topic_ID, 
       PaceBoard_Topics.T_Subject, 
       PaceBoard_Topics.T_Last_Post, 
       PaceBoard_Members.M_Name,
       'Topic' 
  FROM (PaceBoard_Forums INNER JOIN PaceBoard_Topics 
    ON PaceBoard_Forums.Forum_ID = PaceBoard_Topics.Forum_id)
  INNER JOIN PaceBoard_Members ON PaceBoard_Topics.T_Originator = PaceBoard_Members.Member_ID
   and PaceBoard_Members.M_Name = 'pace'
union all
SELECT PaceBoard_Forums.Forum_ID, 
       PaceBoard_Forums.F_Name, 
       PaceBoard_Topics.Topic_ID, 
       PaceBoard_Topics.T_Subject, 
       PaceBoard_Topics.T_Last_Post, 
       PaceBoard_Members.M_Name,
       'Reply'
  FROM ((PaceBoard_Forums INNER JOIN PaceBoard_Topics 
    ON PaceBoard_Forums.Forum_ID = PaceBoard_Topics.Forum_id)
  INNER JOIN PaceBoard_Replys ON PaceBoard_Topics.Topic_ID = PaceBoard_Replys.Topic_ID)
  INNER JOIN PaceBoard_Members ON PaceBoard_Replys.T_Originator = PaceBoard_Members.Member_ID
   and PaceBoard_Members.M_Name = 'pace'

Nu har jag gissat vad några kolumner heter.

Red: Lade till så att man kan skilja på topics och replys.
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 16 okt 2001]

Medlem sedan juni 20019 024 inlägg
#6

Skulle du kunna ge en förklaring hur din SQL sats fungerar, jag är rädd för att mina kunskaper tog slut vid första inlägget. :e ;)

Tabellen PaceBoard_Topics innehåller i alla fall följande:

PaceBoard_Topics
Topic_ID - num
Forum_id - num
T_Subject - txt
T_Message - txt
T_Originator - num
T_Replies - num
T_Last_Post - date
T_Status - true/false
T_Date - date
T_MsgIcon - num
T_NoOfRead - num
T_OldForum - num

[r] Förresten, varför flyttas tråden hit, till databaser/Sql forumet? Med tanke på att SQL forumet ligger under databaser-kategorin så borde det väl ha med SQL Server att göra? Eller är detta forum för allmänna SQL frågor? :q
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."

[Redigerat av Pace den 17 okt 2001]

Medlem sedan dec. 200012 464 inlägg
#7

En union all innebär att man får alla poster från de båda ingående select-satserna. (Om man utelämnar all så tas alla kopior bort från resultatet.) I en union så måste de båda ingående select-satserna returnera lika många fält och dessa måste vara av jämförbara typer.

De båda select-satserna är väl inte så konstiga, bara vanliga joinar.

Forumet är avsett för allmäna sql-frågor.

Egentligen är det Access och Mysql som är malplacerade i förhållande till rubriken.

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 20019 024 inlägg
#8

Det här fattar jag inte: 'Topic' och 'Reply' (precis före båda FROM).

------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."

Medlem sedan dec. 200012 464 inlägg
#9

Jag lade bara till de konstanterna för att kunna skilja på inlägg, dvs om det en ny tråd eller ett svar.

------------------
essentitia preter non sans multiplicandum

259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)