gpt4 book ai didi

php - MySQL查询,添加新别名

转载 作者:行者123 更新时间:2023-11-29 12:46:20 24 4
gpt4 key购买 nike

我有一个用于搜索脚本的 mysql 查询,我需要添加另一个字段(如 SPV.term 别名)此代码告诉我错误号:1054 'on Clause' 中的未知列 'S.id'。

$query = "
SELECT
SP.url,
SP.id,
S.name,
SP.hit,
SP.hot,
SP.action,
SP.id,
SP.smallimage,
SP.mainmodimage,
(SELECT
stock
FROM shop_product_variants
WHERE shop_product_variants.product_id = S.id
AND stock > 0
LIMIT 1) as stock,
(SELECT
price
FROM shop_product_variants
WHERE shop_product_variants.product_id = S.id
OR shop_product_variants.product_id = S.id
AND stock = 0
LIMIT 1) as price,
(SELECT
id
FROM shop_product_variants
WHERE shop_product_variants.product_id = S.id
OR shop_product_variants.product_id = S.id
AND stock = 0
LIMIT 1) as v_id,
(SELECT
old_price
FROM shop_product_variants
WHERE shop_product_variants.product_id = S.id
AND stock > 0
LIMIT 1) as old_price
FROM shop_products_i18n S,
shop_product_variants SPV
INNER JOIN shop_products SP
ON SP.id = S.id
WHERE SP.active = 1
AND S.name LIKE '%" . $get . "%'
OR SP.url LIKE '%" . $get . "%'
OR SPV.term LIKE '%" . $get . "%'
GROUP BY S.id
ORDER BY stock DESC
";

最佳答案

这是您的 from 子句:

FROM shop_products_i18n S,
shop_product_variants SPV INNER JOIN
shop_products SP
ON SP.id = S.id

问题在于您混合了旧式连接和新式连接。一个简单的规则:切勿在 from 子句中使用逗号。

我认为你真正的意思是:

FROM shop_products_i18n S INNER JOIN
shop_products SP
ON SP.id = S.id

因为除了 where 子句之外,您不会在外部查询中的其他任何地方使用 SPV。该条件可能应该进入每个子查询。

顺便说一句,您可以通过将 , 替换为 cross join 来解决原来的问题:

FROM shop_products_i18n S CROSS JOIN
shop_product_variants SPV INNER JOIN
shop_products SP
ON SP.id = S.id

尽管交叉连接 都执行笛卡尔积,但它们在FROM 子句中的优先级表现不同。 , 遇到的问题是优先级规则规定首先解析以下 INNER JOIN - 因此 S 中的列是不可用。

关于php - MySQL查询,添加新别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363111/

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