sql >> Databáze >  >> RDS >> Mysql

Obsah podle uživatele:dvě tabulky se sloupci stejného jména nebo spojení?

Velmi často používaným konceptem v situaci, jako je tato, je mít tabulku uživatelů a tabulku příspěvků a spojovat je dohromady pomocí jedinečného identifikátoru. Tímto identifikátorem může být cokoliv – serializované id, uživatelské jméno, e-mailová adresa atd. – pokud je jedinečný. Propojení se provádí pomocí omezení cizího klíče. Nevím, jak přesně je toho dosaženo v MySQL, ale v Postgresu se to dělá takto:

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

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

Tabulky jsou poté sloučeny pomocí spojení. To lze provést několika způsoby, ale zde je křížové spojení po vložení některých hodnot:

@> 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 v MySQL, ale myslím, že výše uvedené konstrukce budou fungovat přímo.

(edit:Přidány INSERTy pro upřesnění)



  1. Automatický sloupec může být pouze jeden

  2. Ajax stránkování s Jquery, PHP, Mysql

  3. MySQL:Získání čísla řádku (hodnocení) pro konkrétní řádek

  4. Spouštěče události ROLLBACK v postgresql