0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Drupal】DBデータをどうしてもSQLで取得したい場合

Posted at

背景

項目追加等を行ったケースでプログラムがスパゲティ化しちゃうのでSQLで頑張ろうぜなシーンがあったので調べた

※使った事はないで仕様解析はしていませんがリビジョン設定がある場合、これで要件は満たせないと思われます。

ユーザー情報

usersに持っている項目テーブルの一覧が出てくる

show tables like 'user__field%';

代表的なフィールドを例にSELECT
※他にもあるけどそこは自分で解析してください

SELECT
	u.uid		-- drupal上のユーザーID
	,ufd.name	-- ユーザーのログインアカウント名
	,ufd.mail  	-- ユーザーのメールアドレス
	,ufd.init	-- ユーザー登録時のメールアドレスらしい
	,ufd.status	-- 0:block,1:active
	/* 
	,other.field_xxxx_target_id -- 他のEntityに紐づけている
	,other.field_xxxx_value -- 単独で値を持っている
    */ 
FROM
	users u 
INNER JOIN 
	users_field_data ufd 
	ON u.uid = ufd.uid
	AND u.langcode = ufd.langcode
[/*
LEFT JOIN
 	user__field_xxxxx as other
 	ON other.entity_id = u.uid
 	AND u.langcode = other.langcode
 	AND other.bundle = 'user'
*/
LIMIT 0,10;

node

nodeに持っている項目テーブルの一覧が出てくる

show tables like 'node__field%';
SELECT
	n.nid	-- node id
	,ndf.created -- 作成日時の整数値 日付で見たい場合はcastして
	,ndf.changed -- 更新日時の整数値 日付で見たい場合はcastして
	/* 
	,other.field_xxxx_target_id -- 他のEntityに紐づけている
	,other.field_xxxx_value -- 単独で値を持っている
	*/
FROM
	node n
INNER JOIN
	node_field_data ndf
	on n.nid = ndf.nid
	AND n.type = ndf.type
	AND n.langcode = ndf.langcode
/*
LEFT JOIN
	node__field_xxxx other
	ON n.nid = other.entity_id
	AND n.type = other.bundle
	AND  n.langcode = other.langcode
*/	
WHERE
	n.type = 'xxxxx' -- 検索したいnode type
LIMIT 0,10;
;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?