Perhubungan Data Kekeluargaan dalam PHP

Katakan kita mempunyai tugas untuk menyimpan bapa dan anak lelaki. Setiap bapa hanya boleh mempunyai satu anak lelaki, dan anak lelaki itu pula boleh mempunyai satu anak lelaki.

Kita perlu memikirkan cara menyimpan data. Idea pertama yang mungkin terlintas di fikiran - buat dua jadual: parents untuk bapa dan sons untuk anak lelaki. Kemudian hubungkan jadual-jadual ini dengan beberapa medan: son_id atau parent_id.

Walau bagaimanapun, idea ini tidak begitu baik - kerana orang yang sama boleh menjadi serentak baik bapa dan anak lelaki - dan kita perlu menyimpannya dalam kedua-dua jadual, dan ini menyusahkan, mengambil lebih banyak ruang dan mudah membawa kepada ralat.

Pilihan yang lebih baik - hubungkan jadual itu sendiri dengan sendiri: buat jadual users, di dalamnya kita akan menyimpan semua pengguna dan untuk setiap satu buat medan son_id, di mana akan disimpan id anak lelaki dari jadual yang sama:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Pertanyaan

Sekarang mari tulis pertanyaan yang akan mengambil pengguna bersama-sama dengan anak lelakinya.

Sebagai permulaan, mari hanya ambil pengguna:

sqlSELECT
  *
FROM
  users

Sekarang mari JOIN pengguna dengan anak lelaki mereka. Kita akan JOIN jadual itu dengan sendiri, jadi kita perlu melakukan penamaan semula:

sqlLEFT JOIN users as sons

Sekarang kita boleh menentukan hubungan jadual utama dan jadual yang dinamakan semula:

sqlLEFT JOIN users as sons ON sons.id=users.son_id

Sekarang mari tentukan medan:

sqlSELECT
  users.name as user_name, sons.name as son_name

Mari kumpulkan semuanya dan dapatkan pertanyaan berikut:

sqlSELECT
  users.name as user_name, sons.name as son_name
FROM
  users
LEFT JOIN users as sons ON sons.id=users.son_id

Tugas Praktikal

Задание 1

Katakan kita mempunyai kategori. Setiap kategori boleh tergolong dalam kategori induk, dan kategori induk itu pula boleh tergolong dalam kategori induknya sendiri dan seterusnya. Terangkan struktur penyimpanan.

Задание 2

Tulis pertanyaan yang akan mengambil kategori bersama-sama dengan kategori induknya.

Задание 3

Tulis pertanyaan yang akan mengambil kategori bersama-sama dengan induk dan datuknya.

Задание 4

Tulis pertanyaan yang akan mengambil kategori bersama-sama dengan induk, datuk dan nenek moyangnya.