MySQL Script

Beispiele zur Verwendung von SQL Datenbank Funktionen

MySQL Inner Join

Die SQL INNER JOIN Funktion wird verwendet, um MySQL Tabellen miteinander zu verbinden und aus diesem Verbund heraus, Daten abzubilden, zu löschen oder zu verändern. Da ich zum Test der MySQL Beispiele gern auf TYPO3 Installationen zurückgreife, liefert diese MySQL Abfragen, in Verbindung mit der SQL INNER JOIN Funktion, die Ergebnisse aus den Tabellen der TYPO3 Erweiterung tt_news.

INNER JOIN Abfrage der News 2016

Die erste SQL INNER JOIN Abfrage liefert als Ergebnis alle News-Einträge, die im Jahr 2016 angelegt wurden.

SELECT
  DISTINCT(CONCAT('Id: ', LPAD(tt_news.uid, 5, '0'))) AS 'UID',
  CONCAT(FROM_UNIXTIME(tt_news.crdate, '%d.%m.%Y'), ' - ') AS 'Start',
  tt_news.title AS 'Title',
  CONCAT(tt_news_cat.title, ' (', tt_news_cat.uid, ')') AS 'Kategorie'

FROM
  tt_news
    INNER JOIN
      tt_news_cat_mm ON tt_news_cat_mm.uid_local = tt_news.uid
        INNER JOIN
          tt_news_cat ON tt_news_cat.uid = tt_news_cat_mm.uid_foreign

WHERE
  -- Bedingung: 1=1 AND crdate >= 2016
  1 AND FROM_UNIXTIME(tt_news.crdate, '%Y') >= '2016'

ORDER BY
  -- Sortierung: neueste Einträge zuerst
  tt_news.crdate DESC;

Wird die SELECT Abfrage mit dem INNER JOIN mittels phpMyAdmin ausgeführt, kommen Zeilen heraus (sofern Daten vorhanden, die der WHERE Bedingung entsprechen), die so aussehen:

+----------------------------------------------------------------+
|UID       | Start      | Title          | Kategorie             |
+----------------------------------------------------------------+
|Id: 00003 | 07.01.2016 | - News Titel 3 | Kategorie 1 (Kat. UID)|
|Id: 00002 | 06.01.2016 | - News Titel 2 | Kategorie 2 (Kat. UID)|
|Id: 00001 | 05.01.2016 | - News Titel 1 | Kategorie 1 (Kat. UID)|
+----------------------------------------------------------------+

News 2016 pro Kategorie

Das zweite INNER JOIN Beispiel, dient der Zählung von News-Einträgen pro News-Kategorie, aus dem Jahr 2016.

SELECT
  CONCAT(LPAD(COUNT(tt_news_cat_mm.uid_foreign), 5, '0'), ' - Beiträge in der Kategorie: ', tt_news_cat.title) 'News pro Kategorie (2016)'

FROM
  tt_news
    INNER JOIN
      tt_news_cat_mm ON tt_news_cat_mm.uid_local = tt_news.uid
        INNER JOIN
          tt_news_cat ON tt_news_cat.uid = tt_news_cat_mm.uid_foreign

WHERE
  -- Bedingung: 1=1 AND crdate >= 2016
  1 AND FROM_UNIXTIME(tt_news.crdate, '%Y') >= '2016'

GROUP BY
  -- Gruppierung: News Kategorie
  tt_news_cat.uid;

Das Ergebnis der Zählung, sieht nach dem SQL INNER JOIN und der entsprechenden Gruppierung mit GROUP BY, so aus.

+----------------------------------------------+
| News pro Kategorie (2016)                    |
+----------------------------------------------+
|00323 - Beiträge in der Kategorie: Kategorie 1|
|00042 - Beiträge in der Kategorie: Kategorie 2|
|01411 - Beiträge in der Kategorie: Kategorie 3|
+----------------------------------------------+

Wie man sieht, lassen sich durch die Verbindung von Tabellen mit der INNER JOIN Funktion, ganz einfach Werte verknüpfen und weiter verwenden.