Mark (silmeden) php ile MySql çoğaltır

1 Cevap php

Yani, (other question bakınız) bir MySQL sorgusu ile bazı sorunlar yaşıyorsanız, ve farklı bir yaklaşım denemeye karar verdi ediyorum.

Ben aslında ileride gerekebilir bazı yinelenen satırlar, bir veritabanı tablo var, bu yüzden kaldırmak istemiyorum. Ne arıyorum bu yineleme olmadan verileri görüntülemek için bir yoldur, ancak bunları çıkarmadan. (Diğer soru açıklandığı gibi) Ben basit bir seçme sorgusu kullanamazsınız.

So what I need to do is write a code that does the following: 1. Go through my db Table. 2. Spot duplicates in the "ip" column. 3. Mark the first instance of each duplicate with "0" (in a column named "duplicate") and the rest with "1".

Bu şekilde daha sonra = 0 çoğaltmak sadece satır seçebilirsiniz.

NOT: çözüm SELECT sorgusu ile ilgili ise, bu other question İlk okuyun lütfen - Ben sadece GROUP BY / DISTINCT kullanarak değilim bir sebebi var.

Şimdiden teşekkürler.

1 Cevap

MySQL Herhangi bir sıralama / analitik / pencere özelliğe sahip değil, ancak bunun yerine bir değişkeni kullanabilirsiniz:

  SELECT t.ip,
         CASE 
           WHEN @ip != t.ip THEN @rank := 0 
           ELSE @rank := @rank + 1 
         END AS duplicate,
         @ip = t.ip
    FROM TABLE t
    JOIN (SELECT @rank := 0, @ip = NULL) r
ORDER BY t.ip

ip değerin ilk geçtiği duplicate sütununda sıfır değerine sahip olacak; sonraki tüm kayıtları tek değer artırma olacak. Eğer artan sayısını istemiyorsanız, kullanın:

  SELECT t.ip,
         CASE 
           WHEN @ip != t.ip THEN 0 
           ELSE 1 
         END AS duplicate,
         @ip = t.ip
    FROM TABLE t
    JOIN (SELECT @ip = NULL) r
ORDER BY t.ip

Bir alt sorgu içinde kullanarak bu eşsiz bir IP satır bir listesini alabilirsiniz:

SELECT x.ip
  FROM (paste either query in here) x
 WHERE x.duplicate = 0