yma*_*kux 1 mysql sql drupal join
我正在努力解决第二天的问题,但还没有成功.
我的目标是:
对于某些分类术语ID(例如1),我需要获得至少一个节点的imagefield文件路径,这些路径属于该术语id(tid 1)
以下三个查询给了我我需要的东西.一切正常,但我知道它看起来很丑陋,我敢肯定,这是一个很大的性能问题.
$childterm = 10; // Taxonomy term ID
$result = db_fetch_array(db_query("SELECT node.vid FROM node JOIN
term_node ON node.vid=term_node.vid WHERE
term_node.tid=$childterm AND
node.type= 'product' LIMIT 0,1"));
$nvid = $result['vid']; // Extracting node VID by term ID that will be used futher
$result = db_fetch_array(db_query("SELECT field_image_cache_fid FROM
content_field_image_cache WHERE
vid = '%d'", $nvid));
$fid = $result['field_image_cache_fid']; // Extracting file ID from array
$result = db_fetch_array(db_query("SELECT filepath FROM files WHERE
files.fid = '%d'", $fid));
$filepath = $result['filepath']; // Finally. Extracting file path from array
Run Code Online (Sandbox Code Playgroud)
请看图片.
如何改进查询?我只能使用一个sql查询获取文件路径值吗?
提前致谢.
这样的事情应该有效.
$sql = "SELECT f.filepath FROM {node} AS n
INNER JOIN {term_node} AS t ON t.nid = n.nid
INNER JOIN {content_field_image_cache} as c ON c.nid = n.nid
INNER JOIN {files} AS f on f.fid = c.fid
WHERE n.type = '%s'
AND t.tid = %d;"
Run Code Online (Sandbox Code Playgroud)
$ result = db_query($ sql,$ node_type,$ tid);
请注意,您应该使用内容表名称获取信息
$db_info = content_database_info(content_fields($field_name));
Run Code Online (Sandbox Code Playgroud)
原因是,如果从/切换到多个值,SQL将会中断,除非您使用此方法添加额外的表和列名称.