Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Konten-oleh-pengguna:dua tabel dengan kolom dengan nama yang sama atau bergabung?

Konsep yang sangat sering digunakan dalam situasi seperti ini adalah dengan memiliki tabel pengguna dan tabel pos, menghubungkannya bersama dengan pengidentifikasi unik. Pengenal ini bisa apa saja - id serial, nama pengguna, alamat email, dll - asalkan unik. Penautan dilakukan dengan menggunakan batasan kunci asing. Bagaimana tepatnya ini dicapai di MySQL, saya tidak tahu, tetapi di Postgres dilakukan seperti ini:

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

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

Tabel-tabel tersebut kemudian digabungkan menggunakan join. Ini dapat dilakukan dengan beberapa cara, tetapi berikut ini adalah gabungan silang setelah penyisipan beberapa nilai untuk dimainkan:

@> 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 di MySQL, tapi menurut saya konstruksi di atas akan langsung berhasil.

(edit:Menambahkan INSERT untuk klarifikasi)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat memasukkan karakter Yunani dengan benar ke dalam database mysql

  2. Cari rentang usia di mysql, php

  3. Membuat GeoJson di php dari MySql untuk digunakan dengan API javascript MapBox

  4. Tetapkan nilai ke NULL di MySQL

  5. Bagaimana cara menginstal Ruby on Rails dengan mysql dan membuatnya berfungsi, panduan langkah demi langkah?