将多个MySql查询合并到一个查询中

时间:2010-11-01 15:17:16

标签: sql mysql 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

请看图片。

alt text 如何改进查询?我只能使用一个sql查询获取文件路径值吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

这样的事情应该有效。

$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;"

$ result = db_query($ sql,$ node_type,$ tid);

请注意,您应该使用

获取有关内容表名称的信息
$db_info = content_database_info(content_fields($field_name));

原因是,如果从/切换到多个值,SQL将会中断,除非您将此方法用于额外的表名和列名。

答案 1 :(得分:1)

我接受了@googletorp的回答。虽然他的解决方案不是100%为我工作,但它指出了正确的方向。

这是正确的代码:

$childterm = 10;// taxonomy term
$nodetype = 'product';// node type
$sql = "SELECT f.filepath FROM node n 
        INNER JOIN term_node tn ON tn.vid = n.vid  
        INNER JOIN content_field_image_cache cf ON cf.vid = n.vid 
        INNER JOIN files f ON f.fid = cf.field_image_cache_fid 
        WHERE n.type = $nodetype AND tn.tid = $childterm LIMIT 0, 1";
        $result = db_fetch_array(db_query($sql));
    $filepath = $result['filepath']; // image path

谢谢,你们都很酷!