MySQL查询在phpMyAdmin中工作,在PHP中失败
这个想法是,你有一个tbl_物质的主列表,如果你在tbl_物质列表或tbl_物质信息中输入了关于它们的任何信息,那么只要你使用正确的组织ID登录,这些信息就可以显示 重要的是要显示所有的物质,即使它们没有自定义信息,这就是为什么我使用左连接 此查询在phpMyAdmin中非常有效,但当我在数据库脚本中使用它时,我得到: 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解要使用的正确语法,如第2行的“AS”LEFT JOIN SELECT subid、list1、list2、list3、list4、list5 我不确定这个问题是否是我明显遗漏了什么,还是因为这段代码使用了mysql_查询,我知道这是不推荐的、过时的等等 我不是一个数据库专家,所以如果你觉得这个查询很难看,那么我提前道歉 编辑2 下面是构建此查询的代码,它根据您搜索的内容动态构建,但这是基本形式MySQL查询在phpMyAdmin中工作,在PHP中失败,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,这个想法是,你有一个tbl_物质的主列表,如果你在tbl_物质列表或tbl_物质信息中输入了关于它们的任何信息,那么只要你使用正确的组织ID登录,这些信息就可以显示 重要的是要显示所有的物质,即使它们没有自定义信息,这就是为什么我使用左连接 此查询在phpMyAdmin中非常有效,但当我在数据库脚本中使用它时,我得到: 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解要使用的正确语法,如第2行的“AS”LEFT JOIN SELECT subid、list1、list2、l
SELECT SQL_CALC_FOUND_ROWS *
FROM (
SELECT *
FROM tbl_substances
LIMIT 0 , 25
) AS s
LEFT JOIN (
SELECT subid, list1, list2, list3, list4, list5
FROM tbl_substances_lists
WHERE orgid = '1'
) AS x ON s.subst_id = x.subid
LEFT JOIN (
SELECT subid, info
FROM tbl_substances_info
WHERE orgid = '1'
) AS y ON s.subst_id = y.subid
还没有分析代码,但是querywise没有看到语法错误。但我建议您这样写查询:
SELECT SQL_CALC_FOUND_ROWS *
FROM (
SELECT *
FROM tbl_substances LIMIT 0, 25
) AS s
LEFT JOIN (
SELECT subid, list1, list2, list3, list4, list5
FROM tbl_substances_lists
WHERE orgid = '1'
) AS x
ON s.subst_id = x.subid
LEFT JOIN (
SELECT subid, info
FROM tbl_substances_info
WHERE orgid = '1'
) AS y
ON s.subst_id = y.subid
应该会得到同样的结果。在我的例子中,我使用的是ISO 8859-1字符Ã,Ã,é……,执行:utf8_decode$query;已解决此问题。和/或在数据库中最终定义查询时转储查询。我不知道为什么要使用嵌套查询,但它们似乎有效!这是因为我想向用户展示数据库中所有物质的视图,以及他们可能输入的任何信息。如果这不是最好的办法,那么请告诉我。代码生成的SQL查询如问题开头所示。我不理解使用SQL\u CALC\u FOUND的目的_ROWS@njk这是其他人编写的代码,我正在为将来的使用进行调整-SQL\u CALC\u FOUND\u行在那里,因为数据被拉到一个电子表格类型的表中,我稍后运行SELECT FOUND\u ROWS以了解如何使用我返回了很多结果并正确格式化了所有内容。谢谢你的帮助。我尝试过这个查询,但它比我的目标要慢。我想这是因为它连接了整个物质数据库~100000条记录。我试图限制第一次查询的原因是为了加快查询速度以供参考,此查询需要约12秒才能完成;页面顶部的查询需要0.0063秒!您应该通过添加适当的索引来获得相同的性能。100000条记录其实并不多。谢谢,想象一下你正在和一个非常愚蠢的人打交道……你会建议哪里有合适的索引?最简单的方法是:在查询前面加上EXPLAIN关键字,并可选地加上一个\G而不是;最后。\G只是很好地格式化了它。然后您可以查看是否使用了索引以及使用了什么索引。发布结果以及来自SHOW CREATE TABLE tbl_substances和其他两个表格的结果。那么我可以肯定地告诉你,但我已经怀疑你加入的专栏和/或更有可能是orgid专栏。
SELECT SQL_CALC_FOUND_ROWS *
FROM (
SELECT *
FROM tbl_substances LIMIT 0, 25
) AS s
LEFT JOIN (
SELECT subid, list1, list2, list3, list4, list5
FROM tbl_substances_lists
WHERE orgid = '1'
) AS x
ON s.subst_id = x.subid
LEFT JOIN (
SELECT subid, info
FROM tbl_substances_info
WHERE orgid = '1'
) AS y
ON s.subst_id = y.subid
SELECT SQL_CALC_FOUND_ROWS *
FROM tbl_substances s
LEFT JOIN tbl_substances_lists x ON s.subst_id = x.subid AND x.orgid = '1'
LEFT JOIN tbl_substances_info y ON s.subst_id = y.subid AND y.orgid = '1'
LIMIT 0, 25