Vinzenz Mai: mysqli sql statement aus 2 tabellen

Beitrag lesen

Hallo,

sql = "SELECT t1.COUNT(*), t2.id, t2.nameFROMblog_articleASt1 blog_categorysASt2WHEREt2.id=t1.cat";

Du hast hier mehrere Fehler:

a) hast Du das Komma zwischen Deinen beiden Tabellen vergessen,,
b) Deine Spalten falsch begrenzt,

c) hättest Du die ersten beiden Fehler nicht gemacht, so verläßt Du Dich auf
   MySQLs Eigenart bei der Verwendung von Aggregatfunktionen nicht die anderen
   Spalten gruppieren zu müssen,
d) finde ich explizite Join-Syntax schöner als die implizite. Du hättest somit
   die ersten Fehler nicht gemacht.

Schreiben wir es einfach mal in SQL:

SELECT  
    COUNT(*), -- Du kannst nicht einfach nur die Datensätze einer Tabelle zählen  
    t2.id,  
    t2.name  
FROM  
    blog_article t1  -- AS ist optional und wird nicht von allen DBMS verstanden  
INNER JOIN  
    blog_categorys t2  
ON  
    t2.id = t1.cat  
GROUP BY  
    t2.id,           -- wenn Du nach diesen Spalten nicht gruppierst, sind die  
    t2.name          -- Werte innerhalb einer Gruppe in diesen Spalten zufällig  

Möchtest Du die Schemanamen begrenzen, so geht dies mit dem Backtick, Du musst aber jeden einzelnen Teil begrenzen:

SELECT  
    COUNT(*),    -- COUNT wird nicht begrenzt, da Name einer Funktion,  
                 -- nicht einer Spalte  
    `t2`.`id`,   -- sowohl Tabellen(alias)name als auch Spaltenname sind  
    `t2`.`name`  -- zu begrenzen, wenn man begrenzen will,  
                 -- sonst hätte man eine Spalte mit einem Punkt im Namen.  
FROM  
    `blog_article` `t1`  
INNER JOIN  
    `blog_categorys` `t2`  
ON  
    `t2.id` = `t1.cat`  
GROUP BY  
    `t2`.`id`,  
    `t2`.`name`  

Freundliche Grüße

Vinzenz