web-dev-qa-db-fra.com

Base de données d'interrogation pour les articles, filtrage par balise

Je peux l'utiliser pour obtenir des articles publiés à partir de la base de données:

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();     
}

mais selon cet aperç du #__content Les balises de table sont apparemment conservées dans une autre table.

Comment puis-je interroger cette table? Comment ça s'appelle, qu'est-ce qu'il y a dedans? Y at-il de la documentation à ce sujet?

En fin de compte, je veux interroger la base de données pour les publications qui ont une balise dont je porte le nom. Je devrais donc interroger la table de balises pour l'ID.

5
kunterbunt

Vous pourriez Rejoindre le #__content table avec celle du #__contentitem_tag_map, qui est la table qui stocke les relations plusieurs à plusieurs entre les différents éléments de contenu et les balises:

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

Ensuite, dans votre requête, vous pouvez filtrer les éléments de contenu avec un élément where:

$query->where('(tags.tag_id = '. $yourTag .') AND `tags`.`type_id` = 1');
  • Dans votre script, passez la balise souhaitée au $yourTag variable.

  • Le tags.type_id = 1 est le type des balises associées aux articles.

3
FFrewin