ラベル

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 件のコメント:

コメントを投稿