WIK Posted March 29, 2021 Report Posted March 29, 2021 Bun am 3 tabele ce au urmatoarele coloane: Tabel 1 coloanele sunt: id Tabel 2 coloanele sunt id - identifier (problema este ca aici pe o coloana sunt mai multe rezultate de tip : discord:1321312321, licence2:sadadasdasdasdasdas,license:21312321312312321 eu vreau sa scot doar partea cu license: sadasadsa ca sa scot asta am folosit concatenare (nimic greu) SELECT * FROM tabel2 where identifier like '%license:%' Tabel 3 identifier - timp acum ideea e sa iau id-ul din tabelul 1 ca din tabelul 2 sa iau licenta aferenta id-ului si pe baza licentei gasite in tabelul 2 sa scot valorile din tabelul 3 (cu toate ca pot sa iau licenta bazata pe id direct din tabel 2) am nevoie neaparat ca id-ul sa fie extras din tabel 1 si nu din tabel 2, in tabel 2 sa se faca compararea doar. Quote
Wav3 Posted March 29, 2021 Report Posted March 29, 2021 Cu subselect si CONCAT, adica concatenare. Ce ai facut tu cu LIKE nu se numeste concatenare. SELECT * FROM tabel1 WHERE CONCAT("license:", id) IN ( SELECT identifier FROM tabel2 ) Asta iti scoate tot din tabel1 a caror id-uri se regasesc in tabel2 in concatenarea "license:xxx". Cu tabelul3 nu prea am inteles care e treaba. Quote
Moderators Dragos Posted March 29, 2021 Moderators Report Posted March 29, 2021 Din ce am inteles, structura ta si valorile sunt ceva de genul CREATE TABLE `tabel1` ( `id` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `tabel1` (`id`) VALUES (1); CREATE TABLE `tabel2` ( `id` int(11) NOT NULL, `identifier` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `tabel2` (`id`, `identifier`) VALUES (1, 'license:21312321312312321'); CREATE TABLE `tabel3` ( `identifier` varchar(100) NOT NULL, `timp` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `tabel3` (`identifier`, `timp`) VALUES ('license:21312321312312321', 100); COMMIT; si vrei o relationare sa-ti aduca identifier din tabelul 3 dupa ID-ul din tabelul 1 select tabel3.timp, tabel2.identifier from tabel3 inner join tabel2 on tabel2.identifier=tabel3.identifier inner join tabel1 on tabel2.id=tabel1.id and tabel1.id=1 # aici pui ID-ul din tabelul 1 EDIT: Daca vrei doar ce este dupa : din tabelul 2 select tabel3.timp, SUBSTRING_INDEX(tabel2.identifier,":",-1) as "license" from tabel3 inner join tabel2 on tabel2.identifier=tabel3.identifier inner join tabel1 on tabel2.id=tabel1.id and tabel1.id=1 # aici pui ID-ul din tabelul 1 1 Quote
WIK Posted March 29, 2021 Author Report Posted March 29, 2021 31 minutes ago, Dragos said: Din ce am inteles, structura ta si valorile sunt ceva de genul CREATE TABLE `tabel1` ( `id` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `tabel1` (`id`) VALUES (1); CREATE TABLE `tabel2` ( `id` int(11) NOT NULL, `identifier` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `tabel2` (`id`, `identifier`) VALUES (1, 'license:21312321312312321'); CREATE TABLE `tabel3` ( `identifier` varchar(100) NOT NULL, `timp` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `tabel3` (`identifier`, `timp`) VALUES ('license:21312321312312321', 100); COMMIT; si vrei o relationare sa-ti aduca identifier din tabelul 3 dupa ID-ul din tabelul 1 select tabel3.timp, tabel2.identifier from tabel3 inner join tabel2 on tabel2.identifier=tabel3.identifier inner join tabel1 on tabel2.id=tabel1.id and tabel1.id=1 # aici pui ID-ul din tabelul 1 EDIT: Daca vrei doar ce este dupa : din tabelul 2 select tabel3.timp, SUBSTRING_INDEX(tabel2.identifier,":",-1) as "license" from tabel3 inner join tabel2 on tabel2.identifier=tabel3.identifier inner join tabel1 on tabel2.id=tabel1.id and tabel1.id=1 # aici pui ID-ul din tabelul 1 merci mult din nou ! Quote
WIK Posted March 29, 2021 Author Report Posted March 29, 2021 40 minutes ago, Wav3 said: Cu subselect si CONCAT, adica concatenare. Ce ai facut tu cu LIKE nu se numeste concatenare. SELECT * FROM tabel1 WHERE CONCAT("license:", id) IN ( SELECT identifier FROM tabel2 ) Asta iti scoate tot din tabel1 a caror id-uri se regasesc in tabel2 in concatenarea "license:xxx". Cu tabelul3 nu prea am inteles care e treaba. eu initial am facut cu concatenare da am vazut ca n-am nevoie de asa cv si am modificat putin syntaxa. Quote