sql >> Database >  >> RDS >> Mysql

Content-by-user:twee tabellen met kolommen met dezelfde naam of join?

Een veelgebruikt concept in een situatie als deze is het hebben van een gebruikerstabel en een posttabel, die ze aan elkaar koppelt met een unieke identifier. Deze identifier kan van alles zijn - een geserialiseerde id, een gebruikersnaam, e-mailadres, enz. - zolang het maar uniek is. Het koppelen gebeurt met behulp van een externe sleutelbeperking. Hoe dit precies wordt bereikt in MySQL weet ik niet, maar in Postgres is het als volgt gedaan:

CREATE TABLE users (
  id serial PRIMARY KEY,
  name text
);

CREATE TABLE posts (
  content text,
  user_id integer REFERENCES users(id) NOT NULL
);

De tabellen worden vervolgens samengevoegd met behulp van een join. Dit kan op verschillende manieren worden gedaan, maar hier is een cross-join na het invoegen van enkele waarden om mee te spelen:

@> INSERT INTO users (name) VALUES ('James');
@> INSERT INTO users (name) VALUES ('Jones');
@> INSERT INTO posts (content, user_id) VALUES ('Hello from James.', 1);
@> INSERT INTO posts (content, user_id) VALUES ('Greetings from Jones.', 2);
@> SELECT U.id AS user_id, U.name, P.content \
   FROM users U, posts P \
   WHERE U.id = P.user_id;

 user_id | name  |        content
---------+-------+-----------------------
       1 | James | Hello from James.
       2 | Jones | Greetings from Jones.

YMMV in MySQL, maar ik denk dat de bovenstaande constructies meteen zullen werken.

(edit:INSERT's toegevoegd ter verduidelijking)



  1. Volgnummer toevoegen voor elk element in een groep met behulp van een SQL-query zonder tijdelijke tabellen

  2. Formulier validatie

  3. De beste manier om een ​​categorienaam van php op te slaan in een mysql-tabel

  4. Combinatie van zoeken in het veld met PHP &MYSQL