Mysql: Aus zwei Tabellen lesen
Thomas Emmers
- datenbank
0 Cheatah0 Axel Richter0 Thomas Emmers
Hallo,
ich habe für eine Website News in einer Mysql-DB gespeichert. Die Tabelle articles dafür sieht etwas so aus:
artikel_id | headline | text | category_id
-----------------------------------------------------
123456 | Meine Headline | mein Text | allgemein
234567 | Noch eine Headline | mein Text | sport
Mit SELECT * FROM articles frage ich diese Datensätze ab.
Nun gibt es eine zweite Tabelle categories mit einer Beschreibung der Kategorien:
category_id | title
---------------------------------------
allgemein | Allgemeine New
sport | News zum Thema Sport
Ich möchte nun bei der Ausgabe der Artikel die Kategorie mit ausgeben, aber nicht die category_id aus der tabelle articles, sondern den Titel aus categories. Mit einem zweiten Query wäre das natürlich möglich, aber kann ich das auch mit einer Abfrage lösen? Zur Verfügung steht Mysql 4.x, wenn aber gut, wenn es auch auf 3.2x geht.
Danke schon mal
Thomas
Hi,
Mit einem zweiten Query wäre das natürlich möglich, aber kann ich das auch mit einer Abfrage lösen?
sicher doch. Joins beherrscht auch MySQL seit Urzeiten.
Cheatah
Hallo,
Die Tabelle articles dafür sieht etwas so aus:
artikel_id | headline | text | category_id
123456 | Meine Headline | mein Text | allgemein
234567 | Noch eine Headline | mein Text | sportTabelle categories mit einer Beschreibung der Kategorien:
category_id | title
allgemein | Allgemeine New
sport | News zum Thema SportIch möchte nun bei der Ausgabe der Artikel die Kategorie mit ausgeben, aber nicht die category_id aus der tabelle articles, sondern den Titel aus categories.
Das ist etwas, was SQL schon immer konnte. Es nennt sich JOIN. Voraussetzung für einen JOIN zweier Tabellen ist, dass die Tabellen in Beziehung zueinander gesetzt werden können. Das erfordert ein Feld, welches in beiden Tabellen identische Daten enthält. Bei Dir wäre das das Feld category_id:
categories: articles:
category_id--1---+ artikel_id
title | headline
| text
+------n--category_id
Über dieses Feld lässt sich eine 1:n-Beziehung zwischen den beiden Tabellen beschreiben.
Eine JOIN-Abfrage der Tabellen sähe, nach ANSI-SQL so aus:
SELECT articles.artikel_id, articles.headline, articles.text, categories.title FORM articles INNER JOIN categories ON articles.category_id = categories.category_id
MySQL kann das, den INNER JOIN, auch über eine WHERE-Klausel:
SELECT articles.artikel_id, articles.headline, articles.text, categories.title FORM articles, categories WHERE articles.category_id = categories.category_id
http://dev.mysql.com/doc/mysql/en/JOIN.html
viele Grüße
Axel
Man ersetzt jeweils FORM durch FROM:
SELECT articles.artikel_id, articles.headline, articles.text, categories.title FROM articles INNER JOIN categories ON articles.category_id = categories.category_id
SELECT articles.artikel_id, articles.headline, articles.text, categories.title FROM articles, categories WHERE articles.category_id = categories.category_id
viele Grüße
Axel
Hi,
danke euch beiden. Ich werde mich dann mit JOIN mal etwas genauer beschäftigen.
Thomas