sql >> Database >  >> RDS >> Mysql

Database-ontwerp voor opmerkingen en antwoorden

U kunt slechts één tabel gebruiken, die een veld ParentID bevat. Als het record geen waarde heeft, is het een opmerking, anders is het een antwoord (op een opmerking of een antwoord).

U kunt de ParentID-record van de record opvragen (inspecteer het is ParentID) om te zien of dit antwoord een opmerking of een antwoord is.

Bewerken :Bovenstaande is een redelijk praktische oplossing. Om echter met een genormaliseerde versie te gaan, houdt u nog steeds de ene Comments-tabel (zonder ParentID) en maakt u een ReplyTo-tabel met een CommentID en een ResponseID, die beide de ID's zijn van de records in de tabel Opmerkingen.

Met dit idee toont de volgende sql de opmerkingen en het 'antwoord' op elke opmerking voor elk antwoord met een opmerking:

select c.comment, r.comment as reply
from comment as c, comment as r, replyto as rt
where c.ID = rt.CommentID
and r.ID = rt.ReplyID

Zoals Dimitrii aangeeft, geeft het geen reacties weer zonder antwoorden - hiervoor heb je een outer join-query nodig (syntaxis niet getest):

SELECT c.comment, r.comment as reply,
from Comment c 
  left outer join Comment r on c.id = r.id  
  left outer join replyto rt on rt.responseid = r.id



  1. Vergrendelgranulariteit in MySQL begrijpen

  2. Selecteer de eerste rij in elke GROUP BY-groep?

  3. MySQL overeenkomende unicode-tekens met ascii-versie

  4. array_push() vs. $array[] =.... Wat is het snelst?