我有一张名为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%的表名为列表。
我知道我错过了一些东西,或者肯定搞砸了代码,我只是刚刚学习了这个,上面的代码也适用于别的东西,但现在我已经修改了它,它没有。
然后我尝试更改代码,以便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.*");
在$this->db->select("FROM listings.*, Vintage, Vineyard, Wine_Name, Region, Advice, Grape,Producer,Type id,wine_id,Wine_Name,");
的FROM不应该在那里。
生成的查询现在看起来像:
SELECT FROM *... FROM sometable