匹配的产品名称为:$products_name
$ query =“select p.products_id,pd.products_name,p.products_price
来自“。TABLE_PRODUCTS。”p,“。
TABLE_PRODUCTS_DESCRIPTION。 “pd
其中p.products_status = 1
和p.products_id = pd.products_id
和pd.language_id ='“。(int)$ _ SESSION ['languages_id']。”'
和p.products_id<> :p.products_id
AND MATCH('products_name')AGAINST(:products_name IN NATURAL LANGUAGE MODE)“;
1,为什么使用" p, "
而不是" p "
我的IDE显示该命令的警报。我不知道如何纠正它。
运行查询时,错误:
您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在':p.products_id AND MATCH('products_name')附近使用正确的语法:(第6行的产品名称IN NATURAL LAN'
PS:
1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':p.products_id AND MATCH(`products_name`) AGAINST (:products_name IN NATURA' at line 5
in:
[ SELECT p.products_id, pd.products_name, p.products_price FROM TABLE_PRODUCTS p INNER JOIN TABLE_PRODUCTS_DESCRIPTION pd ON (p.products_id = pd.products_id) WHERE p.products_status = 1 AND p.products_id <> :p.products_id AND MATCH(`products_name`) AGAINST (:products_name IN NATURAL LANGUAGE MODE)]
我想在产品下显示相关项目。根据{{1}}
的某些部分进行匹配答案 0 :(得分:1)
SELECT p.products_id, pd.products_name, p.products_price
FROM TABLE_PRODUCTS p
INNER JOIN TABLE_PRODUCTS_DESCRIPTION pd ON (p.products_id = pd.products_id)
WHERE p.products_status = 1
AND pd.language_id = :lang_id
AND p.products_id <> :p.products_id
AND MATCH(products_name) AGAINST (:products_name IN NATURAL LANGUAGE MODE)
-- ^^^^^^^^^^^^^ A ^^^^^^^^^^^^^^ B
-- A = column, don't quote B = value, can be quoted.
match
部分存在语法错误
列名不应引用单引号'
,而应以反引号`
引用
然而,这只是保留字等所需要的。
其他问题
您正在使用隐式连接语法。使用显式连接更好。
如果您正在使用PDO,请不要注入$ vars,但只需使用PDO,它更干净,执行速度更快,您不会犯SQL注入错误。
根据你的问题:
1,为什么使用“p”而不是“p”
,
语法是两个表的隐式交叉连接,您可以将其转换为where子句中的内连接:... AND p.products_id = pd.products_id ...
。
这是SQL '89语法,早在SQL '92语法更清晰的基础上进行了改进
最好使用显式内连接。
答案 1 :(得分:0)
您发送数据库的最终查询是:
select p.products_id, pd.products_name, p.products_price from table1 p, table2 pd
where p.products_status = 1
and p.products_id = pd.products_id
and pd.language_id = 'lang'
and p.products_id <> :product_id AND MATCH('products_name') AGAINST (:products_name IN NATURAL LANGUAGE MODE);
这是错误的。
使用mysql的最近似查询是:
select p.products_id, pd.product_name, p.products_price from table1 p, table2 pd
where p.products_status = 1 and p.products_id = pd.products_id
and pd.language_id = 'lang' and p.products_id <> pd.products_id
AND MATCH(products_name) AGAINST ('product_name' IN NATURAL LANGUAGE MODE);
但我不确定这是不是你想要的......
“,”必须将from子句中的两个表分开。
答案 2 :(得分:0)
MATCH()期待列。你不能把引号放在里面,因为它们被视为字符串。
使用`而不是
MATCH(products_name)
MATCH(`products_name`)