web-dev-qa-db-ja.com

記事のデータベースをクエリ、タグでフィルタリング

これを使用して、データベースから公開された記事を取得できます。

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

この概要 によると、#__contentテーブルタグは明らかに別のテーブルに保持されています。

そのテーブルをクエリするにはどうすればよいですか?それは何と呼ばれ、中身は何ですか?それに関するドキュメントはありますか?

最終的には、自分の名前が付いた特定のタグが付いている投稿をデータベースで照会したいと考えています。したがって、IDについてタグテーブルをクエリする必要があります。

5
kunterbunt

Join#__contentテーブルを、#__contentitem_tag_mapの1つとこれは、さまざまなコンテンツアイテムとタグの間の多対多の関係を格納します。

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

次に、クエリで次の場所を使用してコンテンツアイテムをフィルタリングできます。

$query->where('(tags.tag_id = '. $yourTag .') AND `tags`.`type_id` = 1');
  • スクリプトで、目的のタグを$yourTag変数に渡します。

  • tags.type_id = 1は、記事に関連付けられたタグのタイプです。

3
FFrewin