sql >> Database >  >> RDS >> Mysql

MySQL ::Selecteer uit een door komma's gescheiden tekenreeks

Het is beter om uw schema te normaliseren, sla geen relaties op in de vorm van een door komma's gescheiden lijst, maak in plaats daarvan een verbindingstabel hiervoor, zoals een m:m behouden veel tot veel relatie tussen gebruikers en filters, maak een nieuwe tabel als user_filters met kolommen filter-ID en gebruikers-ID en sla in elke rij één associatie per gebruiker op en filter zoals in uw huidige schemarelatie voor filter 1 met veel gebruikers (1, '1, 2, 3') zal worden als

filter id user id
    (1, '1'),
    (1, '2'),
    (1, '3'),

Voorbeeldschema ziet er zo uit

CREATE TABLE user_filters
    (`fid` int, `u_id` varchar(50))
;

INSERT INTO user_filters
    (`fid`, `u_id`)
VALUES
    (1, '1'),
    (1, '2'),
    (1, '3'),
    (2, '5'),
    (2, '5')
;

CREATE TABLE filters
    (`id` int, `title` varchar(50))
;

INSERT INTO filters
    (`id`, `title`)
VALUES
    (1, 'test'),
    (2, 'test 1')
;


CREATE TABLE users
    (`id` int, `name` varchar(6))
;

INSERT INTO users
    (`id`, `name`)
VALUES
    (1, 'Tom'),
    (2, 'Tim'),
    (3, 'Sue'),
    (4, 'Bruce'),
    (5, 'Ann'),
    (6, 'George')
;

Voor het bovenstaande schema kunt u eenvoudig een query uitvoeren met join, want de onderstaande query kan worden geoptimaliseerd met behulp van indexen

select u.* 
from users u
join user_filters uf on(uf.u_id = u.id)
 where uf.fid =1

Voorbeelddemo

Als u uw schema niet kunt wijzigen en u wilt vasthouden aan het huidige schema, kunt u een zoekopdracht uitvoeren zoals hieronder, maar deze kan niet genoeg worden geoptimaliseerd in vergelijking met de bovenstaande zoekopdracht

select u.* 
from users u
join filters f on(find_in_set(u.id,replace(`u_ids`,' ','')) > 0)
 where f.id =1 

Voorbeelddemo

Databasenormalisatie




  1. mysql bestel varchar-veld als geheel getal

  2. Hoe OCT() werkt in MariaDB

  3. MySQL Workbench verbreekt verbinding bij inactiviteit

  4. Nuttige vragen over het verlopen van het Oracle EBS-wachtwoord/beleid/instellingen