Ik vroeg me af of het mogelijk was om een select query te draaien waarbij alleen columns getoond worden die aan bepaalde criteria voldoen, in mijn geval beginnen met c$

De volgende query werkt goed;
show columns from table1 where (substr(field,1,2)='c$')

Nu wil ik de resultaten verwerken in een query en de daadwerkelijke data alleen uit die columns halen. Ik wil dus eigenlijk naar de volgende query toe;

select show columns from table1 where (substr(field,1,2)='c$') from table1

Is zoiets mogelijk in mysql?
Waarom heb je dynamische kolomnamen?
Is je datamodel wel in orde en genormaliseerd?
het is een database waarbij de gebruiker kolommen moet kunnen toevoegen. Deze custom kolommen beginnen altijd met c$ .

De query moet dus altijd een lijst geven met alle data in de custom kolommen, als de gebruiker een nieuwe toevoegd moet deze ook dynamisch in de query meegenomen worden
Lijkt mij geen goed datamodel. Je laat een gebruiker toch nooit, maar dan ook nooit, de structuur van de database aanpassen.
Najah, ik ken applicaties zat waarbij gebruikers 'vrije velden' kunnen toevoegen, dat is hetzelfde idee als hij heeft denk ik..

Het is wel riskant / gevoelig.. maar als je het goed afschermt dan is het wel te doen denk ik :)

Haha, dit wou ik zelf ook weleens in een tool! Alleen ik denk dat het vrij lastig is..

Wat je eventueel we zou kunnen proberen is het in een stored procedure te doen? Die kan alle kolommen fetchen en dat schrijf je dan in een nieuwe query die je uiteindelijk uitvoert :)

Even een grof schetsje, zitten zeker weten nog fouten in :p


CREATE PROCEDURE naamVanJeFunctie()
BEGIN
	DECLARE column VARCHAR(50);
	DECLARE thequery TEXT
	DECLARE columns TEXT
  DECLARE cur1 CURSOR FOR SELECT columnname FROM INFORMATIONSCHEMA.TABLES WHERE tablename = 'table1' AND SCHEMA = 'db';
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET noresultsleft=1;
   
  SET noresultsleft = 0; 
  SET thequery = 'SELECT ';  
	OPEN cur1;	
	
	WHILE noresultsleft=0 DO
		FETCH cur1 INTO column;
			SET columns = CONCAT(column,', ');
	END WHILE
	
	SET thequery = CONCAT(thequery,columns,' FROM sometable');
	SET noresultsleft = 0;
	
	CLOSE cur1;
	
	PREPARE stmt FROM @thequery;
	EXECUTE stmt;
	DEALLOCATE stmt;
	
END;
kees schreef op 16.03.2009 13:34
Najah, ik ken applicaties zat waarbij gebruikers 'vrije velden' kunnen toevoegen, dat is hetzelfde idee als hij heeft denk ik..


Dat geloof ik nooit... Alé, ze kunnen wel eigen veld toevoegen, maar dan niet op deze manier... Kijk eens naar de manier hoe een phpBB2 (ik weet niet op ze het in 3 ook zo doen) zijn configuration tabel opslaat in de database....

Jens

edit:

CREATE TABLE `phpbb_config` (
  `config_name` varchar(255) NOT NULL,
  `config_value` varchar(255) NOT NULL,
  PRIMARY KEY  (`config_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Gegevens worden uitgevoerd voor tabel `phpbb_config`
--

INSERT INTO `phpbb_config` (`config_name`, `config_value`) VALUES ('config_id', '1'),
('board_disable', '1'),
('sitename', 'sitenaam'),
('site_desc', 'site description'),
('cookie_name', 'phpbb2mysql'),
('cookie_path', '/'),
('cookie_domain', ''),
('cookie_secure', '0'),
('session_length', '3600'),
('allow_html', '1'),
('allow_html_tags', 'b,i,u,pre,object,param,embed'),
('allow_bbcode', '1'),
('allow_smilies', '1'),
('allow_sig', '1'),
enzoverder
Zo werkte ik ook bij ScooterBase, werkt opzich prima alleen zit je met datatypes, standaard waarden etc.

Maargoed ik wou de gebruiker alleen maar helpen :) Dat het onveilig/geen is al verteld door andere users.
Een ander voorbeeld waar dit erg ver uitgewerkt is, is Magento. Webshop systeem, met producten die tot in het oneindige custom worden gemaakt zo ongeveer.
velden aanmaken is een volledig veilige methode waarbij de gebruiker datatypes kan kiezen en het systeem op het meest rustige moment de velden toevoegd. Dit is tevens iets waar ik geen invloed op heb dus ook niks aan kan doen.

@KEes; dat ziet er erg chique uit. Is dit allemaal MySQL, dit is volledig nieuw voor mij.. :( Is er ergens een goede tutorial te vinden over het uitvoeren van Stored Procedures?
Bastiaan schreef op 16.03.2009 15:00
velden aanmaken is een volledig veilige methode waarbij de gebruiker datatypes kan kiezen en het systeem op het meest rustige moment de velden toevoegd.


Dream on boy, dream on....

Al eens gedacht aan wat er gebeurt als de gebruiker velden gaat veranderen en of verwijderen en dan plots systeemvelden tegen komt? Veel plezier om dat op te lossen!
Mij niet gezien....
heb ik nu al niet eerder gezegd dat dit iets is wat ik niet in de hand heb? En iets minder denigrerend mag wel met je "dream on..."

Maargoed als er nog mensen zijn die wat info hebben over stored procedures, graag!

Reageren