[MySQL] Query-Design Denkblockade



  • Hi Leute!

    Ich habe eine absolute Denkblockade bei einer Query. Hier erstmal die Daten:

    CREATE TABLE `content` (
      `id` int(20) unsigned NOT NULL auto_increment,
      `name` varchar(16) collate latin1_general_ci NOT NULL,
      `version` varchar(16) collate latin1_general_ci NOT NULL,
      `enabled` tinyint(1) unsigned default NULL,
      `text` text collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=8 ;
    
    INSERT INTO `content` (`id`, `name`, `version`, `enabled`, `text`) VALUES 
    (1, 'test_1', 'v1.0', 1, 'Test 1'),
    (2, 'test_1', 'v1.1', 1, 'Test 1.1'),
    (3, 'test_1', 'v1.2', 1, 'Test 1.2'),
    (4, 'test_1', 'v1.3', 0, 'Test 1.3 (Deaktiviert)'),
    (5, 'test_2', 'v1.0', 1, 'Test 2'),
    (6, 'test_2', 'v1.1', 0, 'Test 2 (Deaktiviert)');
    (7, 'test_2', 'v1.2', 1, 'Test 2');
    

    Bei dem nun durchgeführten Query möchte ich nun alle aktuellen und vorallem aktiven Versionen der Einträge haben.

    Also ich möchte dann als Ergebnis folgendes haben:

    3, 'test_1', 'v1.2', 1, 'Test 1.2'
    7, 'test_2', 'v1.2', 1, 'Test 2'
    

    Jedoch ich weiß nicht wie ich nur den letzten Akiven bekommen kann. Wie muss das Query dafür aussehen und wie funktioniert dieses dann?

    Vielen dank im voraus!



  • Ah sorry, Ich habs so versucht, doch ich habe kein Resultat bekommen:

    SELECT *
    FROM `content`
    WHERE `id` = (
    SELECT MAX( version )
    FROM `content`
    WHERE enabled =1 )
    


  • vielleicht so:

    SELECT  *
    FROM    content a INNER JOIN
            (SELECT name, MAX(version) as version
             FROM   content
             WHERE  enabled = 1
             GROUP  BY name) b ON a.name = b.name and a.version = b.version
    

    ungetestet...



  • @Airdamn
    Hey das läuft ja wunderbar 🙂 Danke! Jedoch versteh ich diesen Query nicht so recht 😞 bist du so nett und könntest ihn etwas erläutern? 🙂



  • In der Unterabfrage wird nach Name gruppiert und die höchste Versionsnummer rausgepickt.
    Somit ist die Unterabfrage wie eine Tabelle mit 2 Spalten (Name, und Version wobei es immer die höchste Versionsnummer ist). Jeder Name kommt also nur einmal vor.
    Damit aber alle Spalten angezeigt werden, wird das ganze mit der Tabelle selbst verknüpft.

    Hoffe es war einigermaßen verständlich...


Anmelden zum Antworten