MySQL: SELECT, LIMIT. Abfrage optimieren.

versuch13

Erfahrenes Mitglied
Also, ich habe eine Tabelle in der Hyperlinks nach Kategorien gespeichert werden.

links:

id | cat | link


Jetzt möchte ich von jeder Kategorie die letzten drei Einträge auslesen. Dazu würde ich jetzt drei Abfragen schreiben:

Code:
SELECT
    `link`
FROM
    `links`
WHERE 
    `cat`    =     'kategorie1'
LIMIT
    0,3
Code:
SELECT
    `link`
FROM
    `links`
WHERE 
    `cat`    =     'kategorie2'
LIMIT
    0,3
Code:
SELECT
    `link`
FROM
    `links`
WHERE 
    `cat`    =     'kategorie3'
LIMIT
    0,3


Nun hätte ich eine Abfrage pro Kategorie. Kann ich das irgendwie in eine Abfrage zusammenfassen?


Danke. Gruß
 
Code:
WHERE `cat` = 'blubb' OR `cat` = 'foo' OR `cat` = 'bar'
Außerdem würde ich das Datum mit abspeichern und ein ORDER BY angeben, um sicher zu stellen, dass wirklich die 3 neuesten Einträge ausgelesen werden.
 
Code:
WHERE `cat` = 'blubb' OR `cat` = 'foo' OR `cat` = 'bar'
Außerdem würde ich das Datum mit abspeichern und ein ORDER BY angeben, um sicher zu stellen, dass wirklich die 3 neuesten Einträge ausgelesen werden.

So funktioniert das leider nicht. Aber mit Gumbo´s Link habe ich es dann geschafft, danke. Im SELECT gibt es noch einen JOIN, die Spalte für einen Datums Wert spare ich mir und sortieren nach der ID.

Jetzt ist das eine riesige Abfrage, ist die noch irgendwie zu verbessern?

Code:
            (SELECT 
                `a`.`id`, `a`.`cat`, `a`.`link`, `b`.`hits`   
            FROM     
                `links` AS `a` JOIN `hits` AS `b`       
            ON 
                `a`.`link` = `b`.`link`
            WHERE 
                `a`.`flag` = '1' AND `a`.`cat` = 'Artists'
            ORDER BY
                `a`.`id` DESC
            LIMIT
                0,3)
            UNION
            (SELECT 
                `a`.`id`, `a`.`cat`, `a`.`link`, `b`.`hits`   
            FROM     
                `links` AS `a` JOIN `hits` AS `b`       
            ON 
                `a`.`link` = `b`.`link`
            WHERE 
                `a`.`flag` = '1' AND `a`.`cat` = 'Labels'
            ORDER BY
                `a`.`id` DESC
            LIMIT
                0,3)
            UNION
            (SELECT 
                `a`.`id`, `a`.`cat`, `a`.`link`, `b`.`hits`   
            FROM     
                `links` AS `a` JOIN `hits` AS `b`       
            ON 
                `a`.`link` = `b`.`link`
            WHERE 
                `a`.`flag` = '1' AND `a`.`cat` = 'Mags, etc.'
            ORDER BY
                `a`.`id` DESC
            LIMIT
                0,3)
 

Neue Beiträge

Zurück