"ordering": SQL query um max + 1 in der Gruppe in die DB zu schreiben

  • Wenn von einer Galerie in die Andere ein oder mehrere Bilder verschoben werden soll das Ordering gleich mitgesetzt werden.
    Das Ordering wird innerhalb der Galerien separat hochgezählt.


    Folgendermassen hätte ich es versucht wenn das Ordering über alle Bilder ginge


    Code
    $db = JFactory::getDBO();$query = $db->getQuery(true);$fields = array(    $db->quoteName('gallery_id') . '=' . $NewGalleryId,    $db->quoteName('ordering') . '= MAX(ordering) + 1');$conditions = array(    $db->quoteName('id') . ' IN ( ' . $cids . ' )');$query->update($db->quoteName('#__rsgallery2_files'))    ->set($fields)    ->where($conditions);$db->setQuery($query);$result = $db->execute();


    folgendes ähnliches habe ich im Net gefunden aber ich weiss nicht wie es mit dem Query Befehlen umzusetzen wäre.


    SQL
    UPDATE table
        SET field = (SELECT x.max_field
                                FROM (SELECT MAX(t.field) + 1 AS max_field
        FROM TABLE t
        WHERE t.id IN (1,3,5,6,8) x)
  • Joomla ändert das Ordering nicht, wenn du die Kategorie änderst. Nur, wenn du innerhalb der Kategorie einen Eintrag umsortierst (Reihenfolgespalte).


    Du kannst, wenn du eine Legacy-Komponente verwendest, Joomla JTable bemühen, wie das bspw.
    class BannersTableBanner extends JTable
    macht. Siehe dort

    Code
    $this->ordering = self::getNextOrder($this->_db->quoteName('catid') . '=' . $this->_db->quote($this->catid) . ' AND state>=0');


    In Methode check, die du im Model (hier banner.php) vor store aufrufst, wird das ordering hochgesetzt.


    Ich würde aber auf @firstlady hören, wenn du keine eigene JTable-Klasse hast, weil die Methode JTable::getNextOrder auch nicht mehr macht, als eine weitere DB-Abfrage.



    Es gibt auch noch Methode JTable::reorder, die aus mir unerfindlichen Gründen die Ordering-Werte "aufräumt" (1er-Schritte). Mag ich gar nicht ;) Aber, wenn mans mag:

    Code
    * Method to compact the ordering values of rows in a group of rows defined by an SQL WHERE clause.


    Und JTable::move, wenn man was dazwischen-sortiert.

  • Sorry, ich bin zur Zeit schwer beschäftigt. Es war nett, dich in Leipzig zu treffen @finnern und nett dass du mich erkannt hast :) die joomladay-Veranstaltungen sind immer ein Spaß.
    Tatsächlich ist die Table categories eine nested table. Wenn man von der erbt, dann geht das ordering wieder anders als bei einfachen Tables. Ich müsste mich erst wieder reinarbeiten, wie das ordering da funktioniert.
    Schau doch in JTabelNested. Da wird ja nur auf einer bestimmten Ebene und in eime bestimmten Zweig sortiert.