webForumDet fria alternativet

Dublettrensning Deluxe

5 svar · 245 visningar · startad av Jim1234

Jim1234Medlem sedan jan. 20033 inlägg
#1

Hejsan,

Jag har en databas med produkter till min framtida webshop. Problemet är att dessa produkter lagts in i databasen under en längre tid. Därför finns det dubletter och liknande...Detta vore väl relativt enkelt att lösa, om det inte vore för ett litet problem. Jag vill ha kvar EN produkt med varje namn, och ta bort dubletterna. Jag tänkte mig först:
INSERT into nodups select distinct produkt from wares

(Note: nodups är en tom kopia av wares)
Men detta går uppenbarligen inte, för att det finns en massa andra kolumner i båda tables (sammanlagt c:a 20 st). Jag får det klassiska felmeddelandet " Column count doesn't match value count at row 1". Så, går det att göra vad jag behöver? Insert...Select distinct, och ta med HELA raden (inte bara den distincta kolumnen)?
Om inte, finns det något annat sätt att rensa dubletter ur ett table med många kolumner?

OBS: Det är oftast bara en enda kolumn (produkt) som är samma mellan raderna, de andra kolumnerna kan vara olika av vissa anledningar. Med dubletter menar jag här alltså att kolumnen produkt är samma mellan flertalet rader. Kolumnen är en TEXT. Jag försökte lägga till en unik index med IGNORE för att därför tvinga den att ta bort dubletterna, men det gick inte på ett TEXT-fält...Och det verkar inte fungera att konvertera till en VARCHAR av någon anledning. Jag använde följande query till det:

ALTER TABLE wares MODIFY produkt VARCHAR NOT NULL
och på det får jag bara "You have an error in your SQL syntax..." Trots att det borde vara rätt...

Jag använder Mysql 4.0.8. Gamma.

Tack på förhand,

Jim1234

LarsGMedlem sedan dec. 200012 464 inlägg
#2

De här övriga fälten, hur väljer du vilket värde du vill plocka därifrån?

Jim1234Medlem sedan jan. 20033 inlägg
#3

Jag förstår inte riktigt vad du menar? Jag vill alltså kopiera HELA raden som matchar select distinct, inte bara själva kolumnen som select distinct handlar om...

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Select distinct appliceras alltid på en hel rad

Om jag har förstått dig rätt så kan du ha följade data

produktNamm!A1!A2
------------------
Big Bertha......!qq!dd
Big Bertha......!ss!cc
Joe Cameron..!12!bd
Joe Cameron..!13!bd

Hur väljer du mellan de olika värden som finns i A1 och A2 när produktNamn är samma?

Jim1234Medlem sedan jan. 20033 inlägg
#5

Vad menar du med väljer värden? jag väljer inte bland dem alls, för det finns inget system ännu. jag har bara databasen någorlunda färdig, och vill rensa bort dubletterna.

Om select distinct fungerar på hela raden: Varför fungerar inte följande:
INSERT into nodups select distinct produkt from wares
Den klagar där på att column count i de båda tablesen inte är detsamma (eftersom jag bara selectat produkt).

Säg att du, i ditt "test-table" som du pastade nedan, skulle göra en insert select distinct till ett nytt table för HELA raden. Med andra ord skulle du i det nya tablet ha TVÅ rader, en "Big Bertha" och en "Joe Cameron". Vilken är inte viktig..

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Om det är ok att resten av kolumnerna blir odefinierade så kan du göra

INSERT into nodups(produkt) select distinct produkt from wares
123 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)