it-swarm.com.de

Abfragedatenbank für Artikel, Filtern nach Tag

Ich kann dies verwenden, um veröffentlichte Artikel aus der Datenbank zu erhalten:

function queryDatabase_Posts($select, $limit) {
    // Database connection and query object.
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    // Select.
    $query->select($select);
    $query->from($db->quoteName('#__content'));
    // Published posts only.
    $query->where($db->quoteName('state') . ' = 1'); 
    // Order by the date they are published.
    $query->order('publish_up DESC');
    // Set and fetch.
    $db->setQuery($query);
    return $db->loadAssocList();     
}

aber nach diese Übersicht des #__content table-Tags werden anscheinend in einer anderen Tabelle gespeichert.

Wie kann ich diese Tabelle abfragen? Wie heißt es, was ist drin? Gibt es eine Dokumentation dazu?

Letztendlich möchte ich die Datenbank nach Posts abfragen, die ein bestimmtes Tag haben, von dem ich den Namen habe. Ich müsste also die Tag-Tabelle nach der ID abfragen.

5
kunterbunt

Sie könnten Join die #__content Tisch mit dem der #__contentitem_tag_map, die Tabelle, in der die Viele-zu-Viele-Beziehungen zwischen den verschiedenen Inhaltselementen und den Tags gespeichert sind:

$query->join('INNER', '#__contentitem_tag_map AS tags ON `tags`.`content_item_id` = `#__content`.`id`');

Anschließend können Sie in Ihrer Abfrage die Inhaltselemente mit einem where filtern:

$query->where('(tags.tag_id = '. $yourTag .') AND `tags`.`type_id` = 1');
  • Übergeben Sie in Ihrem Skript das gewünschte Tag an $yourTag Variable.

  • Das tags.type_id = 1 ist der Typ für die Tags, die mit Artikeln verknüpft sind.

3
FFrewin