--------------------------------------------------
<?php
$result = db_query('SELECT * FROM {node}');
foreach($result as $item) {
print $item->nid;
}
?>
---------------------------
上の例で、
$result=の右側()の中がクエリの部分。
例では{}の中がnodeとなっているが、ここにはmysqlの中のどのテーブル名も入れることができる。
そのクエリをprintやechoで表示する部分がforeach以下。
foreachで回してprintで表示する。
print $item->nid."<br/>";
や、普通にprintを縦に並べていく。
foreachの
print $item->nid;を、print $item->nid[0];
とすると、nidの1文字目だけを表示する。
$item->nid[3].$item->nid[5]
とすると、4文字目と6文字目を続けて表示する。
参考url。
https://www.drupal.org/node/1251174
<?php
$result = db_query("SELECT nid, title FROM {node}");
foreach ($result as $record) {
// Do something with each $record
$node = node_load($record->nid);
}
?>
異なるテーブルの同じ名前のフィールドを扱うとき。When field names are same.
例えば、
$result = db_query('SELECT taxonomy_term_data.name, users.name FROM ({field_data_field_yoo} LEFT JOIN {taxonomy_term_data} ON field_data_field_yoo.field_yoo_tid = taxonomy_term_data.tid) LEFT JOIN {users} ON field_data_field_yoo.entity_id = users.uid');
foreach(
$result as $item) {
print "<p>".$item->name.$item->name."</p>";
}
このようにすると、print時にnameの定義がだぶってしまって、taxonomy_term_data.nameとusers.nameの区別ができなくなる。
自分の場合だと全部users.nameで表示されてしまった。
それを避けるために、
SELECT taxonomy_term_data.name as tagname, users.name as uname
として、SELECTの段階でそれぞれのフィールドの名前を新たに定義する。
$result = db_query('SELECT taxonomy_term_data.name as tagname, users.name as uname FROM ({field_data_field_yoo} LEFT JOIN {taxonomy_term_data} ON field_data_field_yoo.field_yoo_tid = taxonomy_term_data.tid) LEFT JOIN {users} ON field_data_field_yoo.entity_id = users.uid');
foreach(
$result as $item) {
print "<p>".$item->tagname.$item->uname."</p>";
これで、異なるテーブルの同じ名前のフィールドが区別される。
}
0 件のコメント:
コメントを投稿