dubbele user_id's in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jos Bongers

Jos Bongers

03/03/2014 15:42:26
Quote Anchor link
Wie kan mij helpen om een query te maken voor een SQL database van een joomla website.
Momenteel hebben wij dubbele user_id's.
In lg3u5_user_usergroup_map staan 2 kolommen.
Eén kolom met user_id's, en één kolom met group_id.
Sommige user_id's zijn dubbel en hebben ieder een group_id.
Nu had ik graag de dubbele user_id's met de group_id 18 verwijderd.
Voorbeeld:
user_id group_id
3000 2
3000 18
3001 2
3002 2
3002 18
Gewijzigd op 03/03/2014 15:44:54 door Jos Bongers
 
PHP hulp

PHP hulp

17/11/2024 05:36:05
 
Ivo P

Ivo P

03/03/2014 16:04:43
Quote Anchor link
je wilt elke user die vaker voorkomt (in welke groen danook) uit groep 18 gooien?
 
Jos Bongers

Jos Bongers

03/03/2014 16:08:50
Quote Anchor link
Ja, dat klopt.
Er zijn veel user_id's dubbel.
Bijv user_id 3000 staat er 2 keer in.
1 maal met group_id 18 en nog eens met group_id 2.
Dan wil ik dus de User_id 3000 met group_id 18 verwijderen.
Maar die met group_id 2 moet staan blijven.
 
Ivo P

Ivo P

03/03/2014 17:16:30
Quote Anchor link
Hiermee zou je alle vaker voorkomende userid's vinden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT user_id , COUNT(1)
FROM lg3u5_user_usergroup_map
GROUP BY user_id
HAVING COUNT(1) > 1


Dan wil je dat resultaat gebruiken om ze te verwijderen, incombi met group_id 18

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
DELETE FROM lg3u5_user_usergroup_map 3
WHERE group_id = 18
AND user_id IN
(
   SELECT user_id
   FROM lg3u5_user_usergroup_map
   GROUP BY user_id
   HAVING COUNT(1) > 1
)


Het zou kunnen dat Mysql het niet leuk vindt om te deleten uit dezelfde tabel als waaruit de subquery resultaten haalt.
In dat geval zou je met 2 query's kunnen werken waarbij je de IN() door PHP laat vullen.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/03/2014 17:18:45
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
DELETE FROM lg3u5_user_usergroup_map
WHERE user_id IN
    (SELECT user_id FROM
        lg3u5_user_usergroup_map
    GROUP BY user_id HAVING COUNT(*) > 0)
AND group_id = 18


Toevoeging op 03/03/2014 17:31:02:

Ivo je hebt gelijk, subquery's op de zelfde tabel mogen niet in write query's.
Niet bij stil gestaan, zo kan het wel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
CREATE TEMPORARY TABLE tmp_table (user_id INT NOT NULL);
INSERT INTO tmp_table SELECT user_id FROM
        lg3u5_user_usergroup_map
    GROUP BY user_id HAVING COUNT(*) > 1;
DELETE FROM lg3u5_user_usergroup_map
WHERE user_id IN
    (SELECT user_id FROM
        tmp_table)
AND group_id = 18;


Gewijzigd op 03/03/2014 18:27:30 door Ger van Steenderen
 
Ivo P

Ivo P

03/03/2014 18:19:04
Quote Anchor link
Wel met HAVING COUNT(1) > 1 ipv > 0

Anders wis je ook de user_id die alleen bij Group 18 voorkomen en dus niet dubbel waren.

(anders zou de query een heel stuk simpler kunnen met
DELETE .. WHERE groupd_id = 18
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/03/2014 18:27:05
Quote Anchor link
Meestal slaap ik 's nachts ....
Zal het ff aanpassen.
 
Jos Bongers

Jos Bongers

03/03/2014 20:46:55
Quote Anchor link
Hier mee gedaan:

CREATE TEMPORARY TABLE tmp_table (user_id INT NOT NULL);
INSERT INTO tmp_table SELECT user_id FROM
lg3u5_user_usergroup_map
GROUP BY user_id HAVING COUNT(*) > 1;
DELETE FROM lg3u5_user_usergroup_map
WHERE user_id IN
(SELECT user_id FROM
tmp_table)
AND group_id = 18;

Werkte PERFECT jongens, hartelijk bedankt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.