Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perlu mengecualikan id yang terdapat dalam jadual pertama daripada jadual kedua

Perlu mengecualikan id yang terdapat dalam jadual pertama daripada jadual kedua

PHPz
PHPzke hadapan
2024-02-11 14:33:08926semak imbas

需要从第二个表中排除第一个表中存在的 id

editor php Yuzai di sini untuk memperkenalkan kepada anda soalan tentang pemprosesan data. Apabila kita perlu mengecualikan id yang sudah wujud dalam jadual lain daripada satu jadual, kita boleh melakukannya melalui kaedah tertentu. Masalah ini sangat biasa dalam pemprosesan data. Penyelesaian ini boleh membantu kami mengatur dan memproses data dengan lebih baik, serta meningkatkan kecekapan dan ketepatan pemprosesan data. Dalam artikel seterusnya, kami akan memperincikan cara mencapai matlamat ini dengan menggunakan pernyataan pertanyaan khusus.

Kandungan soalan

Guys, saya perlukan bantuan anda sekali lagi. Otak saya rosak dan saya tidak faham apa yang saya lakukan salah. Saya ada 2 meja

requests
id string `json:"id"`
userid string `json:"user_id"`
status string `json:"status"`
students
id string `json:"id"`
userid string `json:"user_id"`
requestid string `json:"request_id"`
startdate time.time `json:"start_date"`
enddate time.time `json:"end_date"`

Sebagai penerima saya mempunyai id pengguna dan saya perlu mencari semua permintaan pengguna antara tarikh mula dan tarikh tamat tetapi permintaan dengan status "dibatalkan" atau "ditolak" harus dikecualikan. Saya fikir saya boleh menggunakan join kiri tetapi ia tidak berfungsi seperti yang saya perlukan. Pada masa ini saya mempunyai pertanyaan berikut:

status := []string{"canceled", declined"}

   type Result struct {
      tableName        struct{}  `pg:"students"`
      ID               string `json:"id"`
      UserID      int       `json:"user_id"`
      RequestID string    `pg:"fk:request_id"`
      Status           string    `json:"status"`
   }

   var res []Result

    err := Model(&res).
      ColumnExpr("id, user_id, requests.status").
      Where("user_id = ?", UseID).
      Where("start_date >= ? AND end_date <= ?", startDate, endDate).
      Join("LEFT JOIN requests ON requests.id = request_id").
      WhereIn("requests.status IN (?)", status).
      Select()

Pada masa ini, saya menerima semua data daripada pelajar jadual untuk tarikh yang diperlukan, tetapi ia tidak dikecualikan daripada keputusan walaupun status dalam jadual permintaan ialah "Dibatalkan" atau "Ditolak". Jika anda memerlukan sebarang maklumat tambahan daripada saya untuk membantu saya, sila beritahu saya. Terima kasih atas sebarang komen dan cadangan.

Penyelesaian

Anda perlu memastikan anda menggunakan klausa where dengan betul untuk mengecualikan permintaan dengan status "Dibatalkan" atau "Ditolak".

type Result struct {
    TableName  struct{}  `pg:"students"`
    ID         string    `json:"id"`
    UserID     string    `json:"user_id"`
    RequestID  string    `pg:"fk:request_id"`
    Status     string    `json:"status"`
}

var res []Result
status := []string{"canceled", "declined"}

err := Model(&res).
    ColumnExpr("students.id, students.user_id, students.request_id, requests.status").
    Where("students.user_id = ?", UserID).
    Where("students.start_date >= ? AND students.end_date <= ?", startDate, endDate).
    Where("NOT EXISTS (SELECT 1 FROM requests WHERE students.request_id = requests.id AND requests.status IN (?))", status).
    Select()

Saya menggunakan not exists 子查询来检查在 requests 表中具有相同 request_id 的请求,并且其状态存在于 status dalam kepingan. Jika permintaan sedemikian ditemui dalam subkueri, permintaan tersebut akan dikecualikan daripada keputusan akhir.

Atas ialah kandungan terperinci Perlu mengecualikan id yang terdapat dalam jadual pertama daripada jadual kedua. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam