Autor Zpráva
medden
Profil *
Zdravím,
mám 4 tabuľky v MySQL (No dobre, je ich viac, ale zaujímajú nás iba tieto.): plugins, services, applications, resources.

Približné štruktúry:

CREATE TABLE `plugins` (
`id` INTEGER NOT NULL auto_increment ,
`name` VARCHAR (40) NOT NULL default ''
/* ... */
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
);
CREATE TABLE `services` (
`id` INTEGER NOT NULL auto_increment ,
`name` VARCHAR (40) NOT NULL default '',
/* ... */
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
);
CREATE TABLE `applications` (
`id` INTEGER NOT NULL auto_increment,
`type_application` ENUM ('service', 'plugin') NOT NULL default 'plugin',
`type_id` INTEGER NOT NULL default '0',
/* ... */
PRIMARY KEY (`id`),
KEY `type_application` (`type_application`),
KEY `type_id` (`type_id`)
);
CREATE TABLE `resources` (
`id` INTEGER NOT NULL auto_increment ,
`application_id` INTEGER NOT NULL default '0',
`name` VARCHAR(40) NOT NULL,
/* ... */
PRIMARY KEY (`id`),
KEY `application_id` (`application_id`)
);


Relácie:
* resources.application_id odkazuje na application.id
* applications.type_id odkazuje podľa obsahu type_application buď na tabuľku plugins alebo services

V SQL príkaze sa chcem na základe poznaného resources.name dopracovať až k menu pluginu/služby.
V podstate jednoduché: na resources.application_id joinem tabuľku applications(.id),
len ďalej neviem ako na základe podmienky joinuť ďalšie tabuľky: ak je type_application rovné plugin,
joini tabuľku plugins (na stĺpci type_id), inak joini tabuľku resources (takisto type_id). V úvahu nepripadá zlúčenie tabuliek plugins a resources do jedinej
tabuľky. Skúšal som to riešiť už cez subquery, if klauzulu, ale nepodarilo sa (so SQL sa priveľmi nekamarátim).

Vopred veľmi ďakujem za nakopnutie/riešenie, medden.
Kajman_
Profil *
No, asi bych to left joinul i na plugins i na resources... a na zacátku selectu bych dal to ifko...

select if(applications='plugin',plugins.sloupecek,resources.sloupecek) as ruzne from....
medden
Profil *
No nakoniec som to vyriešil vcelku jednoduchým selectom:

SELECT
IF (applications.type_application = 'plugin', plugins.name, services.name) AS name
FROM resources
LEFT JOIN applications
ON resources.application_id = applications.id
LEFT JOIN plugins
ON applications.type_id = plugins.id
LEFT JOIN services
ON applications.type_id = services.id
WHERE
resources.name = "resource"
LIMIT 1;

Vďaka, Kajman_ :-) Zabúdam na jednoduché riešenia problémov ;-)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0