sql >> Database >  >> RDS >> Mysql

Meerdere items in een kolom op mysql . houden

Sla topic_id niet op in het paper tafel. Maak in plaats daarvan een andere genormaliseerde (veel-op-veel) tabel die topic_id . linkt naar paper_id .

/* Each paper can exist in this table as many times as necessary for all its topics */
CREATE TABLE paper_topics (
  paper_id INT NOT NULL,
  topic_id INT NOT NULL,
  FOREIGN KEY (paper_id) REFERENCES paper (paper_id),
  FOREIGN KEY (topic_id) REFERENCES topic (topic_id),
  PRIMARY KEY (paper_id, topic_id)
);

Hiermee kunt u zoveel onderwerpen per papier opslaan als nodig is.

Om de onderwerpen voor een paper op te halen, gebruik:

SELECT 
  paper.*,
  topic_name
FROM 
  paper
  LEFT JOIN paper_topics ON paper.paper_id = topic.paper_id
  LEFT JOIN topic ON topic.topic_id = paper_topic.topic_id
WHERE paper.paper_id = <some paper id value>

Het is bijna nooit een goed idee om te proberen meerdere waarden in één kolom op te slaan (zoals een door komma's gescheiden lijst van topic_id in het paper tafel). De reden is dat je, om ertegen te kunnen zoeken, FIND_IN_SET() wat de complexiteit van het uitvoeren van joins verhoogt en het onmogelijk maakt om een ​​kolomindex te gebruiken bij het opvragen.



  1. Selecteer aparte rijen uit twee tabellen, sorteer op datum

  2. Android ListView met SQLite

  3. Seconden toevoegen aan datetime in MySQL

  4. Taal voor MySQL-foutberichten wijzigen