Mysql Sutun Adina Gore Veri Kumeleme?
-
Simdi atiyorum benim asagidaki gibi tablolarim var,
meyveler ---------------- id | meyve_ad 1 armut 2 elma ####### sebzeler ---------------- id | sebze_ad 1 patlican 2 enginar ####### cuzdan_tipleri ---------------- id | tip 1 pembe kagit 2 mavi kagit
oyle bir sorgu yazayim ki bana
title | data meyveler elma,armut sebzeler patlican,enginar cuzdan_tipleri pembe kagit,mavi kagit
dondurmeli.
mumkun mudur yoksa tek tek query mi atayim :D?
-
böyle birşey mi?
--
edit: değilmiş ama fikir verir belki
NoktaliVirgul tarafından 07/Oca/22 09:16 tarihinde düzenlenmiştir -
Bence tam olarak ne yapmak istediğini söyle ona göre yardımcı olalım. Soru çok saçma, tablolar ondan daha saçma :)
İlla cevap istiyorsan group_concat ile joinleyip union all ile sorgularını birleştirebilirsin.
select 'meyveler', GROUP_CONCAT(meyve_ad) as title from meyveler
UNION ALL
select 'sebzeler', GROUP_CONCAT(sebze_ad) as title from sebzeler
UNION ALL
select 'cuzdan_tipleri', GROUP_CONCAT(tip) as title from cuzdan_tipleri -
tablo tasarımın normalizasyona uygun değil.
aslında olması gereken
Tur
----
id name
1 meyve
2 sebze
3 cüzdan
data---
id name tur_id
1 elma 1
2 patates 2
gibi olmalıydı. Ayrıca patlıcan sebze değil meyve :D
en uygun cevap ise saybirs reyizin verdiği.
sLeymN tarafından 07/Oca/22 10:05 tarihinde düzenlenmiştir -
sLeymN bunu yazdı
tablo tasarımın normalizasyona uygun değil.
aslında olması gereken
Tur
----
id name
1 meyve
2 sebze
3 cüzdan
data---
id name tur_id
1 elma 1
2 patates 2
gibi olmalıydı. Ayrıca patlıcan sebze değil meyve :D
en uygun cevap ise saybirs reyizin verdiği.
meyve = üreme organı
eğer içinde tohum varsa meyvedir. yoksa sebzedir.
örn: domates, hıyar, kabak = çekirdeği var = meyve
maydonoz, marul, lahana = çekirdeği yok = sebze
-
Hocam soyle bisey yaptim. keyler haric diger sutunlari birlsetirip veriyor. Umarim isini gorur Kolay gelsin.
delimiter $$ set @db_name = 'demo'; set @active_data = ''; drop procedure if exists show_data; create procedure show_data() begin declare table_count int; declare active_table_id int; declare active_table_name varchar(255); declare active_table_col_count int; declare active_col_id int; declare active_col_name varchar(255); set table_count = ( select count(table_name) FROM information_schema.tables where table_schema = @db_name ); drop table if exists temp_my_tables; create temporary table temp_my_tables ( id int auto_increment primary key, table_name varchar(255)); insert into temp_my_tables ( select null, TABLE_NAME FROM information_schema.tables where table_schema = @db_name ); drop table if exists temp_active_table_cols; create temporary table temp_active_table_cols ( id int auto_increment primary key, column_name varchar(255)); drop table if exists temp_final_table; create temporary table temp_final_table ( id int auto_increment primary key , title varchar(255), data text ) ; set active_table_id = 1; while active_table_id <= table_count do set active_table_name = ( select table_name from temp_my_tables where id = active_table_id ); insert into temp_active_table_cols ( select null, column_name from information_schema.columns where table_schema = @db_name and table_name = active_table_name and column_key = '' ) ; insert into temp_final_table values ( null , active_table_name , '' ); set active_table_col_count = (select count(*) from temp_active_table_cols ); set active_col_id = 1; while active_col_id <= active_table_col_count do set active_col_name = ( select column_name from temp_active_table_cols where id = active_col_id ); set @s = concat('set @active_data = ( select GROUP_CONCAT(',active_col_name,') from ', active_table_name,' )'); prepare stmt1 from @s; execute stmt1; deallocate prepare stmt1; select @active_data; update temp_final_table set data = concat(data,@active_data) where id = active_table_id; set active_col_id = active_col_id + 1; end while; truncate table temp_active_table_cols; set active_table_id = active_table_id + 1; end while; select * from temp_final_table; end$$ DELIMITER ; call show_data();
-
Arkadaşlar tabloyu gecenin bir yarısı gotumden uydurdum. Aklima daha yaratıcı bir şey gelmedi kusura bakmayin. Patlıcan ve domatesin meyve olduğunu da biliyorum, tablo tasarımının alakasız ve çok saçma olduğunu da. Fakat konu bu değil :)
Tam olarak yapmak istediğim outputtan anlaşılıyor bence.
3 farklı tablonun belirli spesifik sütunlarını gruplayıp, o sütunlara ait satırları unique bir şekilde karşılarına yazmak istiyorum.
Json arraymış gibi hani.
Yanitlariniz için çok teşekkür ederim, yeni uyandım, kendime gelince bakacağım.
end tarafından 07/Oca/22 16:01 tarihinde düzenlenmiştir -
mysql tarafında group_concat veya mssql tarafında string_Agg ile yapabilirsin. önce bir select distinc at ondan dönen listeyi group concatle birleştir.
-
end bunu yazdı
Arkadaşlar tabloyu gecenin bir yarısı gotumden uydurdum. Aklima daha yaratıcı bir şey gelmedi kusura bakmayin. Patlıcan ve domatesin meyve olduğunu da biliyorum, tablo tasarımının alakasız ve çok saçma olduğunu da. Fakat konu bu değil :)
Tam olarak yapmak istediğim outputtan anlaşılıyor bence.
3 farklı tablonun belirli spesifik sütunlarını gruplayıp, o sütunlara ait satırları unique bir şekilde karşılarına yazmak istiyorum.
Json arraymış gibi hani.
Yanitlariniz için çok teşekkür ederim, yeni uyandım, kendime gelince bakacağım.
mongodb kullansana ? db de js kodu çalıştırıp manipüle edebiliyosun verini
-
end bunu yazdı
Arkadaşlar tabloyu gecenin bir yarısı gotumden uydurdum. Aklima daha yaratıcı bir şey gelmedi kusura bakmayin. Patlıcan ve domatesin meyve olduğunu da biliyorum, tablo tasarımının alakasız ve çok saçma olduğunu da. Fakat konu bu değil :)
Tam olarak yapmak istediğim outputtan anlaşılıyor bence.
3 farklı tablonun belirli spesifik sütunlarını gruplayıp, o sütunlara ait satırları unique bir şekilde karşılarına yazmak istiyorum.
Json arraymış gibi hani.
Yanitlariniz için çok teşekkür ederim, yeni uyandım, kendime gelince bakacağım.
select 'meyveler', GROUP_CONCAT(distinct meyve_ad) as title from meyveler
.....
olmamı?
-
Hocam bunda SQL ile yapacağın masraf backend serviste yapacağın birkaç ufak müdahaleden daha çok olur. O sebeple standart belirtilmiş yapıların çok dışına çıkmamak lazım. Kümülatif işlemleri böyle zincirlerseniz ileride çok sorun yaşarsınız. Şu dediğini herhangi bir dilde yapıp array haline getirmek emin ol daha zahmetsiz.
Kısaca verdiğin örnekteki kullanım çok doğru bir mantık değil.