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
8 svar · 136 visningar · startad av Pace
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]
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
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]
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."
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]
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]
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
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."
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