ラベル

Server (108) work (77) Idea (68) Car (31) PC (29) DAW (28) other (19) MakingWEBsite (18) 趣味 (18) health (13) CentOS (11) drupal (11) (9) android (4) スマホ (4) communication (3) drupal7 (3) hint (3) meno (3) モバイル (3) 歯医者 (3) 第二種電気工事士 (3) 英語 (3) PC Server (2) drupal8 (2) ms access (2) uwp C# (2) めし (2) 整備 (2) 音楽 (2) MIDI (1) diy (1) 会計 (1) 動画再生 (1) 生活 (1) 郵便 (1) 食べ物 (1)

2014年7月6日日曜日

drupal sql print query database 表示

durupalにおいて自身のmysqlのデータベースを直接扱う方法。


--------------------------------------------------
<?php
$result = db_query('SELECT * FROM {node}');

foreach($result as $item) {
  print $item->nid;
}
?>

---------------------------
上の例で、
$result=の右側()の中がクエリの部分。
例では{}の中がnodeとなっているが、ここにはmysqlの中のどのテーブル名も入れることができる。

そのクエリをprintやechoで表示する部分がforeach以下。
foreachで回してprintで表示する。

foreachの中でタグを入れるときなどは、
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 件のコメント:

コメントを投稿