これは簡単な質問であるはずなので、以前に回答済みですが、他のStackexchangeの回答のすべてが(少なくとも私が理解できる限り)質問に直接回答していないようです。
_$query = db_select('node', 'n')
->fields('n', array('nid', 'title', 'created'))
->condition('status', 1)
->condition('type', 'photo_gallery')
->orderBy('created', 'DESC')
->execute();
_
これは、ノードのリストを取得するためのdb_select()
です。
私の_photo_gallery
_コンテンツタイプには、tags
分類を参照する_field_tags
_という名前の用語参照フィールドもあります。
データベースからノードのリストを選択し、特定のタグを持つノードのみを取得するにはどうすればよいですか?
Joinステートメントを使用する必要があります。基本的に必要なことは、クエリを別のテーブルの別のクエリと結合することです。
これが使用できる例です。
$query = db_select('file_managed', 'fm');
$query->join('field_data_field_image', 'fi', 'fm.fid = fi.field_image_fid');
$query->groupBy('fm.fid');
$query->fields('fm', array('filename', 'uri'));
$query->fields('fi', array('field_image_width', 'field_image_height'));
$query->condition('fi.bundle','image_for_slider','=');
$result = $query->execute()->fetchAssoc();
この例では、file_managedテーブルがfield_data_field_imageと結合されています。それらをnodeとfield_tagsで切り替える必要があります。
saadluluの答えも正しいですが、それは分類用語のトピックを具体的に扱っていないので、私がほんの数分前に作業した私の解決策を投稿し、何が起こっているのか説明して、一緒に来る他の初心者が理解できるようにします自分の用途のためにそれを変更するのに十分にうまく起こっていること。
私のノードのタイプはphoto_gallery
で、field_tags
という分類用語フィールドがあり、$term_id
の用語が含まれるすべてのノードを取得したい
$query = db_select('node', 'n');
$query->join('field_data_field_tags', 't', 't.entity_id=n.nid');
$result = $query
->fields('n', array('nid', 'title', 'created'))
->fields('t', array('entity_type', 'bundle', 'field_tags_tid', 'entity_id'))
->condition('entity_type', 'node')
->condition('bundle', 'photo_gallery')
->condition('field_tags_tid', $term_id)
->condition('status', 1)
->condition('type', 'photo_gallery')
->orderBy('created', 'DESC')
->execute();
私が知りませんでした/理解できなかったのは、用語参照などの背後でテーブルがどのように構成されているかです。実際のSQLテーブルを調べたところ、明らかになりました。ノードと分類用語の間の接続は別のテーブルに保存され、どのテーブルが大きな問題の1つであるかがわかります。
したがって、私のfield_tags
データはfield_data_field_tags
テーブルに格納されます。ノードの1つのnidをつかんで、データがどのように見えるかを確認しました。
mysql> select * from field_data_field_tags where entity_id=1082;
+-------------+---------------+---------+-----------+-------------+----------+-------+----------------+
| entity_type | bundle | deleted | entity_id | revision_id | language | delta | field_tags_tid |
+-------------+---------------+---------+-----------+-------------+----------+-------+----------------+
| node | photo_gallery | 0 | 1082 | 1082 | und | 0 | 5 |
+-------------+---------------+---------+-----------+-------------+----------+-------+----------------+
1 row in set (0.00 sec)
上記の情報を理解すると、field_data_field_tags
テーブルに結合し、entity_id=nid
で結合する必要があることがわかりました。