gpt4 book ai didi

php - 修改 SQL 以包含额外的表

转载 作者:行者123 更新时间:2023-11-29 14:27:30 24 4
gpt4 key购买 nike

我如何获得横幅名称?如果您查看下面的数据库,您会发现这会带回除实际横幅之外的所有内容。名称

此外,我认为它应该检查横幅状态以检查其是否已启用。

之前:

SELECT * 
FROM banner_image bi
LEFT JOIN banner_image_description bid ON (bi.banner_image_id = bid.banner_image_id)
WHERE
bi.banner_id = '".$banner_id."'
AND bid.language_id = '".$this->config->get('config_language_id')."'
<小时/>
Array ( 
[0] => Array (
[banner_image_id] => 1
[banner_id] => 1
[link] =>
[image] => data/banners/test.jpg
[language_id] => 1
[title] => Test banner
)
)

之后:

SELECT
bi.*,
b.name
FROM
banner b,
banner_image bi
LEFT JOIN banner_image_description bid ON (bi.banner_image_id = bid.banner_image_id)
WHERE
b.banner_id = '".$banner_id."'
AND bi.banner_id = '".$banner_id."'
AND bid.language_id = '".$this->config->get('config_language_id')."'
<小时/>
Array ( 
[0] => Array (
[banner_image_id] => 1
[banner_id] => 1
[link] =>
[image] => data/banners/test.jpg
[name] => Banner heading
)
)

数据库结构:

CREATE TABLE IF NOT EXISTS `banner` (
`banner_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) COLLATE utf8_bin NOT NULL,
`status` tinyint(1) NOT NULL,
PRIMARY KEY (`banner_id`)
);

CREATE TABLE IF NOT EXISTS `banner_image` (
`banner_image_id` int(11) NOT NULL AUTO_INCREMENT,
`banner_id` int(11) NOT NULL,
`link` varchar(255) COLLATE utf8_bin NOT NULL,
`image` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`banner_image_id`)
);

CREATE TABLE IF NOT EXISTS `banner_image_description` (
`banner_image_id` int(11) NOT NULL,
`language_id` int(11) NOT NULL,
`banner_id` int(11) NOT NULL,
`title` varchar(64) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`banner_image_id`,`language_id`)
);

最佳答案

我认为这会做你想要的:

SELECT *
FROM
banner b
INNER JOIN banner_image bi ON b.banner_id = bi.banner_id
INNER JOIN banner_image_description bid ON bi.banner_image_id = bid.banner_image_id
WHERE
b.banner_id = '". $banner_id ."'
AND b.status = TRUE
AND bid.language_id = '". $this->config->get('config_language_id') ."'

我会避免使用SELECT *,而是明确列出您实际想要获取的每一列。

我认为您遇到问题的一个原因是您使用逗号(隐式连接)来连接 banner 表,但没有指定连接条件。您需要在 WHERE 子句中添加一个条件,例如 b.banner_id = bi.banner_id。但最好使用显式的 INNER JOIN 语法。

<小时/>

我看不出在此查询中使用 LEFT JOIN 而不是 INNER JOIN 的原因。在 WHERE 子句中,您指定 banner_image_description 表中必须满足的条件才能返回行。如果该表中没有相应的行(这是 LEFT JOIN 的目的),则不会返回任何行。所以我将它们切换为INNER JOIN

关于php - 修改 SQL 以包含额外的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10663131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com