MySQL Alias as TableName
Ik wil een alias gebruiken als tablename, (zie hieronder).
Hoe kan ik dit werkend maken?
SELECT
id AS Id1, Title
FROM
database.TableAlias
WHERE
(SELECT
Name AS TableAlias
FROM
database.Names
WHERE id=1
)
;
Dit zal beter gaan:
Opmerking: Gebruik geen hoofdletters in tabel- en/of kolomnamen, dat gaat vroeg of laat fout.
je maakt nu een alias 't' aan voor de tabel 'tablename',
wat ik graag wil, is 't' als tabelnaam gebruiken.
Opvolgend aan jou query (Voorbeeld):
SELECT * FROM database.'t';
't' is de alias van de tabelnaam en 'database' is een naam die niet in deze query thuishoort. Ik heb geen idee wat je hiermee probeert te bereiken.
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `NaamJan` (
`id` int(11) NOT NULL auto_increment,
`notes` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Ik wil nu een query maken:
SELECT username AS uTabName FROM users where id =1;
Dat gaat natuurlijk,...
En dan deze username gebruiken in de volgende query als tabelnaam;
SELECT * FROM uTabName;
Dus een Alias als Tabelnaam...
EDIT:
En deze query in 1 keer uitvoeren (of query's samenvoegen, als het mogelijk is.) Of moet ik het resultaat in PHP verwerken en gewoon los een 2e query loslaten???
Gewijzigd op 01/01/1970 01:00:00 door - Jim -
In dat geval heb je het 'probleem' dat DATABASE ook een gereserveerd keyword is binnen mysql. Dat de tabelnaam voor een 'keyword' wordt gezien kun je voorkomen door met backticks je tabelnamen en kolommen aan te geven
Tevens kan, wat je wilt bereiken, vrees ik niet in 1 query.. (maar ik heb nog nooit een dergelijke constructie gezien of geprobeerd, dus misschien ben ik onwetend daarin). Maar ik zou zo iets dan verwachten:
Quote:
STOP !!!CREATE TABLE `NaamJan` (
`id` int(11) NOT NULL auto_increment,
`notes` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Ik wil nu een query maken:
SELECT username AS uTabName FROM users where id =1;
Dat gaat natuurlijk,...
En dan deze username gebruiken in de volgende query als tabelnaam;
SELECT * FROM uTabName;
`id` int(11) NOT NULL auto_increment,
`notes` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Ik wil nu een query maken:
SELECT username AS uTabName FROM users where id =1;
Dat gaat natuurlijk,...
En dan deze username gebruiken in de volgende query als tabelnaam;
SELECT * FROM uTabName;
Jij hebt een ernstige fout in het datamodel zitten. Je maakt namelijk helemaal nooit, maar dan ook nooit een nieuwe tabel aan wanneer er toevallig een nieuwe gebruiker bijkomt. De tabel 'naamJan' kan dus gewoon niet bestaan.
Maak een tabel 'notes' aan en zet hierin alle notes van alle gebruikers. Uiteraard maak je een kolom 'user_id' aan om de juiste gebruiker te kunnen herkennen.
Tip: ga je eens verdiepen in normaliseren, ik vermoed dat je nog wel meer van dit soort fouten en foutjes in je systeem hebt zitten.
Offtopic: Backtics ` horen in de afvalbak, niet in een query! Nu niet, nooit niet. Die troep dus niet meer gebruiken.
mbv backticks maak je volgens mij geen onderscheid tussen een werkelijke tabelnaam en een alias. Maar jou voorbeeld is correct, maar werkt niet (ook) niet. (alleen backticks toegevoegd ;) ).
@pholeron:
OFF TOPIC: misschien geeft jou MySQL highlight script wel raadt :D:D ;)
Quote:
Precies, daarom snap ik ook niet wat 'database' in de query doet. Je bent namelijk al verbonden met de database, het is dus volkomen zinloos (en fout) om dit nogmaals op te geven.database heb ik alleen gebruikt om database en tabelnaam aan te geven.
Quote:
GEBRUIK NOOIT BACKTICS !!!! Ritueel verbranden die zooi, ga je in de hoek zitten schamen dat je ze ooit hebt gebruikt en vergeet vervolgens dat ze bestaan.mbv backticks maak je volgens mij geen onderscheid tussen een werkelijke tabelnaam en een alias. Maar jou voorbeeld is correct, maar werkt niet (ook) niet. (alleen backticks toegevoegd ;) ).
En verder, zie mijn opmerking over het datamodel, daar heb je echt een ernstige fout in zitten. Ga dat nu oplossen voordat je echt hopeloos in de problemen komt te zitten.
tabel t
is voldoende.
1) Relax!!!, ik snap je frustratie over datamodelling en normaliseren,....
Mij datamodel klopt wel, en ik zit op de Xe normalisatie vorm, maar ik wil het nog dynamischer maken.
Ik wil graag met modules een systeem opbouwen, waarin in een tabel(Modules) de namen van de aanwezige modules (ModuleName) staan.
Iedere module heeft een eigen tabel, met module specifieke records.
Doormiddel van een ModuleId en RecordId wil ik RecordId-gegevens uit de tabel ModuleId-tabel.
2) en blijf relaxen.....
Gewijzigd op 01/01/1970 01:00:00 door - Jim -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$sql = "SELECT * FROM Modules WHERE id = 1;";
$res = mysql_query($sql);
$rec = mysql_fetch_array($res);
$sql1 = "SELECT * FROM ".$rec[1].";";
$res1 = mysql_query($sql1);
while ($rec1 = mysql_fetch_array($res1)) {
echo "rec: ".$rec1[1]."<br />\n";
}
?>
$sql = "SELECT * FROM Modules WHERE id = 1;";
$res = mysql_query($sql);
$rec = mysql_fetch_array($res);
$sql1 = "SELECT * FROM ".$rec[1].";";
$res1 = mysql_query($sql1);
while ($rec1 = mysql_fetch_array($res1)) {
echo "rec: ".$rec1[1]."<br />\n";
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - Jim -
Is het ook niet mogelijk om dit dmv een join te realiseren?
SELECT jouw, ding FROM (
SELECT rec1 FROM modules)
niet getes wel eens gebruikt in Oracle ga ervan uit dat dat in mysql ook wel kan.
Edit nu wel getest.
geeft keurig alle gevraagde gegevens. Let op met naamgeving in je subquery.
geheid dat je de volgende pagina nodig hebt
http://dev.mysql.com/doc/refman/5.0/en/unnamed-views.html
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
De fout zat dus in het plaatsen van een WHERE clause: en geen datamodelling ;) en/of Normalisatie... ;) (Maar het is wel goed om daar goed op te letten.)
Mijn script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
SELECT
id AS Id1, Title
FROM
database.TableAlias
WHERE
(SELECT
Name AS TableAlias
FROM
database.Names
WHERE id=1
)
;
?>
SELECT
id AS Id1, Title
FROM
database.TableAlias
WHERE
(SELECT
Name AS TableAlias
FROM
database.Names
WHERE id=1
)
;
?>
Script klaasjan:
Code (php)
Thanks,
GRaag gedaan