[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Aktuellste Artikel AUßER aus Kategorie x,y,z - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
sebhecht
Beiträge: 126
Registriert: 22. Feb 2008, 11:02
Wohnort: Stuttgart

Aktuellste Artikel AUßER aus Kategorie x,y,z

5. Okt 2013, 06:46

Hallo,
ich würde gerne eine Liste der aktuellsten Artikel ausgeben lassen. Jedoch sollen dabei bestimmte Kategorien nicht berücksichtigt werden. Da ich mich mit SQL-Abfragen überhaupt nicht auskenne, habe ich aus einem anderen Modul folgenden Code übernommen und rumgebastelt:
$cat_ids=array(1,2,3);

Code: Alles auswählen

$sql->setQuery("SELECT name,id,updatedate FROM rex_article WHERE   id NOT IN (".implode(',', $cat_ids).") AND status = '1' ORDER BY updatedate DESC LIMIT 0,$Anzahl");
Leider klappt es nicht.
Ich müsste ja wohl bei Select irgendwie angeben, dass die Kategorie-Id nicht 1,2,3 sein soll.
Wie kann ich das denn machen?

Ich habe jetzt schon ziemlich lange rumprobiert und nichts hat geklappt. Daher wär ich über Hilfe sehr dankbar.
Sebstian Hecht

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: Aktuellste Artikel AUßER aus Kategorie x,y,z

5. Okt 2013, 09:22

Hi Sebastian,
  1. $cat_ids muss ein Array mit den IDs der Kategorien sein, die du ausschließen möchtest.
  2. Da du ja Artikel, die in Kategorien liegen, ausschließen möchtest, musst du außerdem die SQL-Abfrage so abändern, dass die Artikel über die Datenbankspalte path selektiert werden:

    Code: Alles auswählen

    $where_path = '';
    if(!empty($cat_ids))
      $where_path = "AND path NOT LIKE '|".implode("|%' AND path NOT LIKE '|", $cat_ids)."|%' ";
    
    $sql->setQuery("
      SELECT
        name,
        id,
        updatedate
      FROM rex_article
      WHERE 1
        AND status
        ".$where_path."
      ORDER BY updatedate DESC LIMIT 0, ".$Anzahl
    ); 
  3. Der Code funktioniert nur, wenn die Kategorien, die du ausschließen möchtest, Rootkategorien sind. Wenn du auch speziell Unterkategorien ausschließen möchtest, wäre ein einfacher Workarround, wenn du bei den $cat_ids einfach die Kategorie nach dem Schema ROOTKATEGORIE-ID|SUBKATEGORIE-ID angeben würdest. Beispiel mit folgender Kategorienstruktur:

    Code: Alles auswählen

    Home         (1)
    Essen        (2)
      Obst       (4)
        Bananen  (6)
        Äpfel    (7)
        Birnen   (8)
      Gemüse     (5)
    Trinken      (3)
    Wenn du jetzt Äpfel und Birnen ausschließen möchtest, kannst du das so machen:

    Code: Alles auswählen

    $cat_ids = array(
      '2|4|7',
      '2|4|8'
    );
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

sebhecht
Beiträge: 126
Registriert: 22. Feb 2008, 11:02
Wohnort: Stuttgart

Re: Aktuellste Artikel AUßER aus Kategorie x,y,z

5. Okt 2013, 10:12

Schon mal vielen Dank. Jetzt wird das schon klarer für mich.
Ein paar Fragen noch zum Verständnis:
1) Ich möchte die Kategorie der Startseite ausschließen, deren id 1 ist. Die Unterkategorie konnte ich durch 1|107 schon ausschließen. Die Startkategorie kann ich jedoch irgendwie durch 1 nicht ausschließen. Muss ich irgendetwas beachten?
2) Was bewirkt "WHERE 1"

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: Aktuellste Artikel AUßER aus Kategorie x,y,z

5. Okt 2013, 17:09

Hi!
sebhecht hat geschrieben:1) Ich möchte die Kategorie der Startseite ausschließen, deren id 1 ist. Die Unterkategorie konnte ich durch 1|107 schon ausschließen. Die Startkategorie kann ich jedoch irgendwie durch 1 nicht ausschließen. Muss ich irgendetwas beachten?
Um einen speziellen Artikel auszuschließen, musst du direkt über die ID des Artikels gehen. Das geht z. B. mit der zusaätzlichen Angabe AND id != 1 in der WHERE-Klausel.
sebhecht hat geschrieben:2) Was bewirkt "WHERE 1"
Das ist einfach mein Stil, mit dem ich SQL-Abfragen erstelle.
Die 1 selektiert einfach alle Datensätze, weil der Term immer wahr ist.
Dadurch kann ich dann alle folgenden Bedingungen über AND übersichtlich in einzelnen Zeilen miteinander verknüpfen.

Das hat außerdem den Vorteil bei dynamisch erstellten Abfragen, die keine, eine oder mehrere AND-verknüpfte Bedingungen enthalten können, einfach die Bedingungen ohne Beachtung, ob da jetzt ein AND hin gehört oder nicht, mit dem vorangestelltem AND angehängt werden können. Kleines Beispiel:

Code: Alles auswählen

$sql = rex_sql::factory();
$qry = "
  SELECT
    id,
    name,
    city
    /* ... */
  FROM table
  WHERE 1";


if($name = rex_get('name'))
  $sql .= " AND name LIKE '%".$sql->escape($name)."%'";

if($city = rex_get('city'))
  $sql .= " AND city LIKE '%".$sql->escape($city)."';

/* ... */
Vor Ausführung wird MySQL diese Bedingung dann sowieso wegoptimieren.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Zurück zu „Allgemeines [R4]“