使用JOIN对多个表进行SQL查询

时间:2014-01-22 14:56:17

标签: php mysql drupal

需要SQL查询的帮助 - 我的查询目前适用于我想要添加第三个表的两个表,但我不知道如何做到这一点,我尝试了很多次但它给出了错误......

我会尝试将所有代码显示为更精确:

SQL QUERY

$sql = "SELECT main.nid, main.title FROM {node} AS main
                    LEFT JOIN {localizernode} AS lang ON main.nid = lang.nid 
                    WHERE main.type = 'drug' AND main.title LIKE '%s%%' AND lang.language = '%s' AND main.status = 1 
                    ORDER BY main.title ASC";

$result = db_query($sql);
while ($product = db_fetch_object($result)) {
// build up the list
$product_list .= '<li>'.$product->title.'</li>';
} 

此QUERY根据类型为drug的网站语言抓取表 NODE 中的所有数据。并给我一个表格旁边所有项目的列表,按标题排序

表“节点”:

nid |视频|类型|标题|状态

9 | 9 |药物|标题1 | 1

15 | 15 |药物|标题2 | 1


我想在QUERY中使用/包含的表“content_type_drug”如下所示:

vid | nid |价值| image_title

9 | 9 |文字值| imagename.jpg

15 | 15 |文字值5 | imagename3.jpg

我希望它从“content_type_drug”中获取以下值:“value”,“image_title”并将其显示在上面的列表中:

$result = db_query($sql);
    while ($product = db_fetch_object($result)) {
    // build up the list
    $product_list .= '<li>'.$product->title.$product->value.$product->image.'</li>';
    }

我正在寻求帮助,而不是完整的解决方案,请给我任何想法。

2 个答案:

答案 0 :(得分:1)

据我所知,你需要加入三张桌子。所以查询将是

$sql = "SELECT main.nid, main.title, ctd.value,ctd.image_title FROM {node} AS main
        LEFT JOIN {localizernode} AS lang ON main.nid = lang.nid 
        INNER JOIN {content_type_drug} ctd ON main.vid = ctd.vid 
        WHERE main.type = 'drug' AND main.title LIKE '%s%%' 
        AND lang.language = '%s' AND main.status = 1  ORDER BY main.title ASC";

我假设vid和nid是外键。您可以使用外键替换此子句

答案 1 :(得分:1)

要添加新表,您只需添加另一个联接。

LEFT JOIN {content_type_drug} AS drug ON drug.vid = main.vid 

因此,您的完整查询将如下所示:

SELECT main.nid, main.title, drug.value, drug.image_title FROM {node} AS main
                LEFT JOIN {localizernode} AS lang ON main.nid = lang.nid 
                LEFT JOIN {content_type_drug} AS drug ON drug.vid = main.vid 
                WHERE main.type = 'drug' AND main.title LIKE '%s%%' AND lang.language = '%s' AND main.status = 1 
                ORDER BY main.title ASC

希望这会有所帮助:)