1

我有两个表: table_1: item_id, name... table_2: image_id, item_id,url

以下函数使用传入的“$name”检索项目的“urls”。我首先需要从 table_1 获取“item_id”以在查询中使用。我只需要从 table_2 返回“url”。

它目前工作正常,但我觉得它可以简化为在一个带有 JOIN 的查询中完成,而不是两个单独的查询。我尝试使用不同的 'JOIN' 来使其工作,但我似乎无法做到正确。

这是现在具有两个查询的功能...

function get_items( $name ) {

    global $wpdb;

    $sql1 = "SELECT `item_id` FROM `table_1` WHERE `name` = '$name'";
    $results1 = $wpdb->get_var( $sql1 );

    $sql1 = "SELECT `url` FROM `table_2` WHERE `item_id` = '$results1'";
    $results2 = $wpdb->get_results( $sql1, ARRAY_A );

    return $results2;

}

这是我尝试实现的“JOIN”,但没有成功(我也将其切换并执行了“LEFT/RIGHT JOIN”,结果相同)...

$sql1 = "SELECT `table_2`.`url` 
         FROM `table_2` 
         INNER JOIN `table_1`
         ON `table_2`.`item_id` = `table_1`.`item_id`
         WHERE `table_1`.`item_id` = '$name'";

关于组合这两个查询的任何建议?

4

2 回答 2

2

您的查询的问题是这个WHERE table_1.item_id = '$name',它应该name不是item_id

SELECT  b.url
FROM    table1 a
        INNER JOIN table2 b
            ON a.item_id = b.item_id
WHERE   a.name = '$name'
于 2012-10-16T12:38:31.593 回答
0
select url from table_2 where item_id IN (select item_id from table_1 where name = $name )
于 2012-10-16T12:40:25.043 回答