MySQL Assoziation Problem - Anzeige von Verbindungen
Da ich nun schon viel zu lange an diesem MySQL-Problem sitze, nutze ich nun alle Ressourcen die mir zur Verfügung stehen.
Ich habe zwei Tabellen:
“key_assoc” => key_x, key_y
“keyword” => id, keyword
In key_assoc sind die Keyword-Verbindungen drinnen, nach dem Motto:
2|3
3|5
7|10
usw.
und in Keywords siehts dann z.b. so aus:
2|Haus
3|Garten
5|Pilz
7|Stein
10|Webdesign
Ich möchte nun die Keyword-Verbindungen ausgeben, aber nicht anhand ihrer ID, sondern anhand ihrer Namen, also:
Haus|Garten
Garten|Pilz
Stein|Webdesign
Leider bekomme ich es nicht hin, benötige ich ein Join? Wenn ja, welche Art? Stehe leider auf dem Schlauch.
Ich füge auch einfach mal die Testdaten mit ein:
CREATE TABLE `keyword` (
`id` int(10) unsigned NOT NULL auto_increment,
`keyword` varchar(255) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `keyword` (`keyword`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=60 ;
--
-- Daten für Tabelle `keyword`
--
INSERT INTO `keyword` VALUES (1, 'webdesign');
INSERT INTO `keyword` VALUES (2, 'usability');
INSERT INTO `keyword` VALUES (3, 'web');
INSERT INTO `keyword` VALUES (4, 'internet');
INSERT INTO `keyword` VALUES (5, 'accessibility');
INSERT INTO `keyword` VALUES (6, 'adsense');
INSERT INTO `keyword` VALUES (7, 'affiliate');
INSERT INTO `keyword` VALUES (8, 'seo');
INSERT INTO `keyword` VALUES (9, 'suchmaschinenoptimierung');
INSERT INTO `keyword` VALUES (10, 'blackhat');
INSERT INTO `keyword` VALUES (11, 'whitehat');
INSERT INTO `keyword` VALUES (12, 'marketing');
INSERT INTO `keyword` VALUES (13, 'sem');
INSERT INTO `keyword` VALUES (14, 'podcast');
INSERT INTO `keyword` VALUES (15, 'programmieren');
INSERT INTO `keyword` VALUES (16, 'börse');
INSERT INTO `keyword` VALUES (17, 'aktien');
INSERT INTO `keyword` VALUES (18, 'aktie');
INSERT INTO `keyword` VALUES (19, 'geld');
INSERT INTO `keyword` VALUES (20, 'vermögen');
INSERT INTO `keyword` VALUES (21, 'karriere');
INSERT INTO `keyword` VALUES (22, 'job');
INSERT INTO `keyword` VALUES (23, 'rente');
INSERT INTO `keyword` VALUES (24, 'sport');
INSERT INTO `keyword` VALUES (25, 'fitness');
INSERT INTO `keyword` VALUES (26, 'ausdauer');
INSERT INTO `keyword` VALUES (27, 'muskeln');
INSERT INTO `keyword` VALUES (28, 'ernährung');
INSERT INTO `keyword` VALUES (29, 'diät');
INSERT INTO `keyword` VALUES (30, 'bodybuilding');
INSERT INTO `keyword` VALUES (31, 'sixpack');
INSERT INTO `keyword` VALUES (32, 'kraft');
INSERT INTO `keyword` VALUES (33, 'google');
INSERT INTO `keyword` VALUES (34, 'code');
INSERT INTO `keyword` VALUES (35, 'coden');
INSERT INTO `keyword` VALUES (36, 'php');
INSERT INTO `keyword` VALUES (37, 'c++');
INSERT INTO `keyword` VALUES (38, 'java');
INSERT INTO `keyword` VALUES (39, 'visual basic');
INSERT INTO `keyword` VALUES (40, 'oop');
INSERT INTO `keyword` VALUES (41, 'quellcode');
INSERT INTO `keyword` VALUES (42, 'sourcecode');
INSERT INTO `keyword` VALUES (43, 'kaffee');
INSERT INTO `keyword` VALUES (44, 'klingelton');
INSERT INTO `keyword` VALUES (45, 'klingeltöne');
INSERT INTO `keyword` VALUES (46, 'jamba');
INSERT INTO `keyword` VALUES (47, 'sparabo');
INSERT INTO `keyword` VALUES (48, 'musik');
INSERT INTO `keyword` VALUES (49, 'crazy frog');
INSERT INTO `keyword` VALUES (50, 'handy');
INSERT INTO `keyword` VALUES (51, 'mp3');
INSERT INTO `keyword` VALUES (52, 'kostenlos');
INSERT INTO `keyword` VALUES (53, 'spass');
INSERT INTO `keyword` VALUES (54, 'fun');
INSERT INTO `keyword` VALUES (55, '3d');
INSERT INTO `keyword` VALUES (56, 'maya');
INSERT INTO `keyword` VALUES (57, 'character');
INSERT INTO `keyword` VALUES (58, 'modellierung');
INSERT INTO `keyword` VALUES (59, 'modell');
CREATE TABLE `key_assoc` (
`key_x` int(10) unsigned NOT NULL,
`key_y` int(10) unsigned NOT NULL,
`gewichtung` float(10,2) unsigned NOT NULL,
UNIQUE KEY `key_x` (`key_x`,`key_y`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
--
-- Daten für Tabelle `key_assoc`
--
INSERT INTO `key_assoc` VALUES (19, 33, 1.75);
INSERT INTO `key_assoc` VALUES (19, 6, 1.13);
INSERT INTO `key_assoc` VALUES (33, 6, 0.18);
INSERT INTO `key_assoc` VALUES (19, 8, 0.45);
INSERT INTO `key_assoc` VALUES (19, 22, 0.40);
INSERT INTO `key_assoc` VALUES (6, 8, 0.20);
INSERT INTO `key_assoc` VALUES (6, 22, 0.20);
INSERT INTO `key_assoc` VALUES (8, 22, 0.20);
INSERT INTO `key_assoc` VALUES (12, 52, 0.60);
INSERT INTO `key_assoc` VALUES (12, 4, 1.27);
INSERT INTO `key_assoc` VALUES (52, 4, 0.87);
INSERT INTO `key_assoc` VALUES (12, 7, 0.50);
INSERT INTO `key_assoc` VALUES (7, 12, 0.57);
INSERT INTO `key_assoc` VALUES (7, 34, 0.57);
INSERT INTO `key_assoc` VALUES (12, 34, 0.29);
INSERT INTO `key_assoc` VALUES (33, 36, 0.45);
INSERT INTO `key_assoc` VALUES (33, 8, 2.17);
INSERT INTO `key_assoc` VALUES (33, 3, 3.22);
INSERT INTO `key_assoc` VALUES (36, 8, 0.25);
INSERT INTO `key_assoc` VALUES (36, 3, 0.25);
INSERT INTO `key_assoc` VALUES (8, 3, 0.25);
INSERT INTO `key_assoc` VALUES (33, 4, 2.75);
INSERT INTO `key_assoc` VALUES (33, 11, 0.67);
INSERT INTO `key_assoc` VALUES (4, 11, 0.17);
INSERT INTO `key_assoc` VALUES (53, 3, 0.50);
INSERT INTO `key_assoc` VALUES (33, 53, 1.20);
INSERT INTO `key_assoc` VALUES (8, 53, 0.09);
INSERT INTO `key_assoc` VALUES (36, 6, 0.80);
INSERT INTO `key_assoc` VALUES (3, 38, 0.48);
INSERT INTO `key_assoc` VALUES (3, 4, 2.17);
INSERT INTO `key_assoc` VALUES (38, 4, 0.33);
INSERT INTO `key_assoc` VALUES (36, 41, 0.40);
INSERT INTO `key_assoc` VALUES (36, 2, 0.40);
INSERT INTO `key_assoc` VALUES (36, 5, 0.40);
INSERT INTO `key_assoc` VALUES (41, 2, 0.20);
INSERT INTO `key_assoc` VALUES (41, 5, 0.20);
INSERT INTO `key_assoc` VALUES (2, 5, 0.20);
INSERT INTO `key_assoc` VALUES (33, 2, 0.58);
INSERT INTO `key_assoc` VALUES (33, 1, 0.58);
INSERT INTO `key_assoc` VALUES (3, 2, 0.98);
INSERT INTO `key_assoc` VALUES (3, 1, 0.23);
INSERT INTO `key_assoc` VALUES (3, 53, 0.23);
INSERT INTO `key_assoc` VALUES (2, 1, 0.15);
INSERT INTO `key_assoc` VALUES (2, 53, 0.15);
INSERT INTO `key_assoc` VALUES (1, 53, 0.15);
INSERT INTO `key_assoc` VALUES (4, 3, 1.34);
INSERT INTO `key_assoc` VALUES (43, 15, 0.73);
INSERT INTO `key_assoc` VALUES (43, 35, 1.17);
INSERT INTO `key_assoc` VALUES (15, 35, 0.18);
INSERT INTO `key_assoc` VALUES (43, 19, 0.44);
INSERT INTO `key_assoc` VALUES (43, 34, 0.44);
INSERT INTO `key_assoc` VALUES (43, 33, 0.44);
INSERT INTO `key_assoc` VALUES (35, 19, 0.22);
INSERT INTO `key_assoc` VALUES (35, 34, 0.22);
INSERT INTO `key_assoc` VALUES (35, 33, 0.22);
INSERT INTO `key_assoc` VALUES (19, 34, 0.11);
INSERT INTO `key_assoc` VALUES (34, 33, 0.11);
INSERT INTO `key_assoc` VALUES (4, 33, 0.20);
INSERT INTO `key_assoc` VALUES (4, 1, 0.20);
INSERT INTO `key_assoc` VALUES (4, 19, 0.33);
INSERT INTO `key_assoc` VALUES (4, 2, 0.20);
INSERT INTO `key_assoc` VALUES (4, 8, 0.20);
INSERT INTO `key_assoc` VALUES (4, 36, 0.20);
INSERT INTO `key_assoc` VALUES (4, 38, 0.20);
INSERT INTO `key_assoc` VALUES (33, 19, 1.26);
INSERT INTO `key_assoc` VALUES (33, 38, 0.70);
INSERT INTO `key_assoc` VALUES (1, 3, 0.20);
INSERT INTO `key_assoc` VALUES (1, 19, 0.20);
INSERT INTO `key_assoc` VALUES (1, 2, 0.20);
INSERT INTO `key_assoc` VALUES (1, 8, 0.20);
INSERT INTO `key_assoc` VALUES (1, 36, 0.20);
INSERT INTO `key_assoc` VALUES (1, 38, 0.20);
INSERT INTO `key_assoc` VALUES (3, 19, 0.15);
INSERT INTO `key_assoc` VALUES (3, 8, 0.15);
INSERT INTO `key_assoc` VALUES (3, 36, 0.15);
INSERT INTO `key_assoc` VALUES (19, 2, 0.05);
INSERT INTO `key_assoc` VALUES (19, 36, 0.05);
INSERT INTO `key_assoc` VALUES (19, 38, 0.05);
INSERT INTO `key_assoc` VALUES (2, 8, 0.05);
INSERT INTO `key_assoc` VALUES (2, 36, 0.05);
INSERT INTO `key_assoc` VALUES (2, 38, 0.05);
INSERT INTO `key_assoc` VALUES (8, 36, 0.05);
INSERT INTO `key_assoc` VALUES (8, 38, 0.05);
INSERT INTO `key_assoc` VALUES (36, 38, 0.05);
INSERT INTO `key_assoc` VALUES (3, 52, 0.86);
INSERT INTO `key_assoc` VALUES (36, 33, 0.67);
INSERT INTO `key_assoc` VALUES (4, 21, 0.33);
INSERT INTO `key_assoc` VALUES (4, 22, 0.33);
INSERT INTO `key_assoc` VALUES (21, 22, 0.33);
INSERT INTO `key_assoc` VALUES (34, 3, 0.50);
INSERT INTO `key_assoc` VALUES (53, 4, 1.25);
INSERT INTO `key_assoc` VALUES (48, 4, 0.50);
INSERT INTO `key_assoc` VALUES (17, 16, 0.67);
INSERT INTO `key_assoc` VALUES (33, 12, 1.13);
INSERT INTO `key_assoc` VALUES (4, 12, 0.13);
INSERT INTO `key_assoc` VALUES (19, 12, 0.13);
INSERT INTO `key_assoc` VALUES (3, 12, 0.85);
INSERT INTO `key_assoc` VALUES (3, 50, 0.67);
INSERT INTO `key_assoc` VALUES (51, 48, 1.00);
INSERT INTO `key_assoc` VALUES (51, 50, 0.75);
INSERT INTO `key_assoc` VALUES (12, 2, 0.20);
INSERT INTO `key_assoc` VALUES (6, 33, 0.67);
INSERT INTO `key_assoc` VALUES (18, 17, 0.50);
INSERT INTO `key_assoc` VALUES (33, 17, 0.43);
INSERT INTO `key_assoc` VALUES (17, 19, 0.29);
INSERT INTO `key_assoc` VALUES (17, 3, 0.29);
INSERT INTO `key_assoc` VALUES (19, 3, 0.14);
Verwandte Artikel
- MySql Quickreferenz
- CSS Sprites - Background Repeat Problem
- MySQL - mal was komplexeres
- Slideshow über MySQL Performance
- MySQL Connection Management in PHP
- Pingback: MySQL - mal was komplexeres by Webdesignblog on Mai 17, 2007
3 Kommentare
Tut mir leid, die Kommentarfunktion für diesen Beitrag ist geschlossen.

SELECT b.keyword, c.keyword
FROM key_assoc a
LEFT JOIN keyword b ON a.key_x = b.id
LEFT JOIN keyword c ON a.key_y = c.id
Ich hab deine Testdaten jetzt einfach mal links liegen lassen und die Anfrage einfach mal so aufgeschrieben:
SELECT links.keyword, rechts.keyword
FROM keyword links, keyword rechts, key_assoc mitte
WHERE mitte.key_x = links.id AND mitte.key_y = rechts.id
Die tut das folgende:
An die Tabelle key_assoc (die ich mitte genannt habe) wird zu jedem der beiden key-Attribute jeweils eine “Instanz” der keyword-tabelle (als links und rechts) per Equi-Join rangejoint. Damit wird erreicht, dass die Keywords für die Keys zusätzlich verfügbar sind. Anschließend werden diese herangejointen Keywords ausgegeben.
Habs jetzt nicht getestet, sollte aber funktionieren.
Perfekt!! Danke euch beiden, ihr glaubt nicht wie lange ich rumprobiert (und natürlich auch in einigen Ebooks sowie einem Forum gefragt) habe.