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
444
<p>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. <kod>Submission_id</code> mengenal pasti setiap penyerahan borang. </p> <pre class="brush:php;toolbar:false;">+----+--------------+----------- ---+--------+ |. id | +----+--------------+--------------+--------+ |. 1 | |. 2 |. 10 | |. 3 |. 10 | |. 15 | |. 5 | |. 15 | |. 7 | |. 8 |. 20 | |. 9 |. 20 | +----+-----------------+--------------+-------+</pra> ; <p>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. </p> <p>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: </p> <pre class="brush:php;toolbar:false;">+--------------+ |. submission_id | +-------------+ |. 10 | |. 15 | |. 20 | +--------------+</pra> <p>Jadi saya ingin menyemak sama ada komit mempunyai nilai yang sama untuk kekunci <kod>pengilang</kod>, <kod>model</kod> 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). </p> <p>Saya telah lama memikirkan tentang perkara ini dan cuba mencari beberapa penyelesaian yang mungkin, tetapi tidak menemui apa-apa yang boleh dipercayai. </p>
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<b.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 anda kelihatan seperti 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!