Bagaimana untuk mengisih baris pendua dalam jadual pasangan nilai kunci pada berbilang lajur dalam MySQL?
P粉115840076
P粉115840076 2023-09-05 18:21:40
0
1
402

Jadi, saya mempunyai jadual pasangan kunci/nilai berikut, pengguna menyerahkan data melalui borang dan setiap soalan pada borang ditambahkan pada jadual di sini sebagai baris yang berasingan. Submission_id mengenal pasti setiap penyerahan borang.

+----+--------------+----------- ---+--------+ |. id | +----+--------------+--------------+--------+ |. 1 | |. 2 |. 10 | |. 3 |. 10 | |. 15 | |. 5 | |. 15 | |. 7 | |. 8 |. 20 | |. 9 |. 20 | +----+-----------------+--------------+-------+ ; 

Seperti yang dapat dilihat daripada data di atas, komit dengan id 10 dan 15 mempunyai nilai yang sama (hanya id komit sahaja yang berbeza). Ini pada asasnya kerana pengguna menyerahkan borang yang sama dua kali, jadi ia adalah pendua.

Saya cuba mencari cara untuk mengisih jadual ini supaya sebarang penyerahan pendua muncul bersama mengikut tertib. Memandangkan jadual di atas, saya cuba membina pertanyaan yang memberikan saya hasil berikut:

+--------------+ |. submission_id | +-------------+ |. 10 | |. 15 | |. 20 | +--------------+ 

Jadi saya ingin menyemak sama ada komit mempunyai nilai yang sama untuk kekunci pengilang, model Jika ya, maka mereka mendapat id komit dan mereka diletakkan bersebelahan antara satu sama lain dalam keputusan. Terdapat kunci lain dalam jadual sebenar, tetapi saya hanya mahu memadankan pendua berdasarkan 3 kunci ini (pengilang, model, nama pertama).

Saya telah lama memikirkan tentang perkara ini dan cuba mencari beberapa penyelesaian yang mungkin, tetapi tidak menemui apa-apa yang boleh dipercayai.

P粉115840076
P粉115840076

membalas semua (1)
P粉659518294

Ini bukan jadual nilai kunci. Selalunya dipanggil jadual/hubungan/skema nilai entiti-atribut.

Lihat soalannya, jika jadual disusun dalam bentuk biasa biasa pertama dan kedua, ini akan menjadi remeh - hanya menggabungkan nilai, kumpulan mengikut nilai tersebut, dan kira....

SELECT manufacturer, model, firstname, COUNT(DISTINCT submission_id) FROM atable GROUP BY manufacturer, model, firstname HAVING COUNT(DISTINCT submission_id)>1;

atau guna connect....

SELECT a.manufacturer, a.model, a.firstname , a.submission_id, b.submission_id FROM atable a JOIN atable b ON a.manufacturer=b.manufacturer AND a.model=b.model AND a.firstname=b.firstname WHERE a.submission_id
          

Atau gunakan isihan dan bandingkan baris bersebelahan....

SELECT * FROM ( SELECT @prev.submission_id AS prev_submission_id , @prev.manufacturer AS prev_manufacturer , @prev.model AS prev_model , @prev.firstname AS pref_firstname , a.submission_id , a.manufacturer , a.model , set @prev.submission_id:=a.submission_id as currsid , set @prev.manufacturer:=a.manufacturer as currman , set @prev.model:=a.model as currmodel , set @prev.firstname=a.forstname as currname FROM atable ORDER BY manufacturer, model, firstname, submission_id ) WHERE prev_manufacturer=manufacturer AND prev_model=model AND prev_firstname=firstname AND prev_submission_id<>submission_id;

Jadi penyelesaiannya adalah dengan menjadikan data andakelihatanseperti hubungan biasa....

SELECT ilv.values , COUNT(ilv.submission_id) , GROUP_CONCAT(ilv.submission_id) FROM (SELECT a.submission_id , GROUP_CONCAT(CONCAT(a.key, '=',a.value)) AS values FROM atable a GROUP BY a.submission_id ) ilv GROUP BY ilv.values HAVING COUNT(ilv.submission_id)>1;

Semoga penyelesaian berdasarkan gabungan dan urutan harus jelas sekarang.

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!