加入get_where - 这可能吗?

问题描述 投票:1回答:2

我有一张名为Listings的桌子和一张名为wines的桌子,还有一张名为wineinfo的桌子

我最初使用以下内容仅从listings表中获取信息,但自从我重新构建数据库以来,它需要使用另外两个表。

$listing = $this->db->get_where( "listings", [ "listingID" => $id ] 
)->row();

if( !$listing )
        throw new Exception("Error: Listing you're trying to bid on does not exist.", 1);

    // check not to bid on own listings
    if( $listing->list_uID == $userid )
        throw new Exception("Error: Dont't bid on your own listings.", 1);

然后我尝试更改代码,以便JOIN语句可以工作

$this->db->select("FROM listings.*, Vintage, Vineyard, Wine_Name, Region, Advice, Grape,Producer,Type id,wine_id,Wine_Name,");
$this->db->from("wineinfo");
$this->db->where(["listingsID" => $id]);
$this->db->where(["wineinfo.wine_id" => "listings.wine_id"]);
$this->db->where(["wineinfo.Vintage" => "listings.wine_id"]);
$this->db->join("wines", "wineinfo.wine_id = wines.wine_id");
$listing = $this->db->get()->row();

我收到了这个错误。

Unknown table 'listings'

但是有100%的表名为列表。

我知道我错过了一些东西,或者肯定搞砸了代码,我只是刚刚学习了这个,上面的代码也适用于别的东西,但现在我已经修改了它,它没有。

php mysql codeigniter
2个回答
1
投票

然后我尝试更改代码,以便JOIN语句可以工作

你试图将3个表与2个FROM和一个JOIN子句组合在一起,这是不正确的。

你需要保持SELECT干净,只需选择你需要的列,如:

$this->db->select("listings.*, wineinfo.*, wine.*");

那么FROM条款:

$this->db->from("wineinfo");

然后进行连接:

$this->db->join("listings", "wineinfo.wine_id = listings.listingsID");
$this->db->join("wines", "wineinfo.wine_id = wines.wine_id");

然后是你的where子句。

请注意,我不知道你的表结构,所以我只能猜测你的JOIN关系。这也是一个简化的例子,我认为3个表没有匹配的列名。

响应“模糊”注释:您可以将select子句限制为只需要的列,例如

$this->db->select("listings.*, wineinfo.vintage, wine.*");

或使用别名:

$this->db->select("listings.*, wineinfo.wine_id as my_wineID, wine.*");

0
投票

$this->db->select("FROM listings.*, Vintage, Vineyard, Wine_Name, Region, Advice, Grape,Producer,Type id,wine_id,Wine_Name,");的FROM不应该在那里。

生成的查询现在看起来像:

SELECT FROM *... FROM sometable
© www.soinside.com 2019 - 2024. All rights reserved.