MySQL Alias as TableName

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Jim  -

- Jim -

06/02/2007 18:43:00
Quote Anchor link
Hi guy's,
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
)
;
 
PHP hulp

PHP hulp

20/11/2024 01:29:46
 
Frank -

Frank -

06/02/2007 18:48:00
Quote Anchor link
Dit ziet eruit als een redelijk brakke query, de subquery slaat nergens op. Ik mag toch hopen dat dit slechts een heel slecht voorbeeld is.

Dit zal beter gaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
  t.id AS id1,
  t.title AS title
FROM
  tabelnaam AS t
WHERE
  t.id = 1

Opmerking: Gebruik geen hoofdletters in tabel- en/of kolomnamen, dat gaat vroeg of laat fout.
 
- Jim  -

- Jim -

06/02/2007 18:55:00
Quote Anchor link
@Frank:
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';
 
Frank -

Frank -

06/02/2007 18:58:00
Quote Anchor link
'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.
 
- Jim  -

- Jim -

06/02/2007 19:16:00
Quote Anchor link
Ik heb 2 tabellen:

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 -
 
Martijn Wieringa

Martijn Wieringa

06/02/2007 19:20:00
Quote Anchor link
Ik neem aan dat 'database' een tabelnaam is in je systeem?

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT `id` AS `Id1`, `Title`
FROM `database`.`TableAlias`
WHERE
(
    SELECT `Name` AS `TableAlias`
    FROM `database`.`Names`
    WHERE `id` = 1
);
 
Frank -

Frank -

06/02/2007 19:26:00
Quote Anchor link
Quote:
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;
STOP !!!

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.
 
- Jim  -

- Jim -

06/02/2007 19:30:00
Quote Anchor link
database heb ik alleen gebruikt om database en tabelnaam aan te geven.
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 ;)
 
Frank -

Frank -

06/02/2007 19:37:00
Quote Anchor link
Quote:
database heb ik alleen gebruikt om database en tabelnaam aan te geven.
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.
Quote:
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 ;) ).
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.

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.
 
Bo az

Bo az

06/02/2007 19:41:00
Quote Anchor link
Overigens hoef je voor een tabel alias niet het keyword AS te gebruiken
tabel t
is voldoende.
 
- Jim  -

- Jim -

06/02/2007 19:47:00
Quote Anchor link
@Frank:
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 -
 
- Jim  -

- Jim -

06/02/2007 20:17:00
Quote Anchor link
Dit is een oplossing mbv PHP, maar is het niet mogelijk om dit geheel in 1 query door MySQL te laten uitvoeren?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
}


?>
Gewijzigd op 01/01/1970 01:00:00 door - Jim -
 
- Jim  -

- Jim -

07/02/2007 00:11:00
Quote Anchor link
Is het ook niet mogelijk om dit dmv een join te realiseren?
 
Klaasjan Boven

Klaasjan Boven

07/02/2007 08:08:00
Quote Anchor link
Volgens mij moet dit gewoon kunnen

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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT link
FROM (

SELECT alle.link
FROM linken AS alle
) AS eenlink
LIMIT 0 , 30


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
 
- Jim  -

- Jim -

07/02/2007 10:37:00
Quote Anchor link
Thnx, KlaasJan!!

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
)
;

?>


Script klaasjan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
SELECT link
FROM (

SELECT alle.link
FROM linken AS alle
) AS eenlink
LIMIT 0 , 30
?>


Thanks,
 
Klaasjan Boven

Klaasjan Boven

07/02/2007 11:40:00
Quote Anchor link
GRaag gedaan
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.