我正在写一个程序PHP搜索收集数据库中的植物名称。您应该能够输入科学植物名称(例如Rumex acetosa或Medicago x varia)以查找关于该名称的所有entrys。植物名称被雾化,所以每个名称都由两到五个部分组成。我不想单独搜索每个部分,但我需要将它们全部添加到一个名称。搜索连接的植物名称
所以我试图做的是写一个SELECT CONCAT
条款。
$sql = "
SELECT observationid, fullnamestring, latitudedecimal, longitudedecimal
FROM observation, (
SELECT CONCAT (genusormonomial, firstepithet, rank, hybridflag, intraspecificepithet)
FROM name
) name_str, name, gatheringsitecoordinates
WHERE name.nameid = observation.fkname
AND gatheringsitecoordinates.sitecoordinateid = observation.fkgatheringsite
AND (
SELECT CONCAT (genusormonomial, firstepithet, rank, hybridflag, intraspecificepithet)
FROM name
) name_str LIKE '" . mysql_real_escape_string($sucharray[0]) . "'
";
不幸的是,它不会这样工作,因为他抱怨我的查询语法。
错误:您的SQL语法有错误;检查对应于您MySQL服务器版本正确的语法在线附近name_str LIKE 'rum%'
使用手册2
为了让您知道它应该是什么样子到底浏览http://bgbm3.bgbm.fu-berlin.de/iopi/gpc/query.asp
我是一个总Sql-newb所以也许你的某个人可以帮助我!
谢谢!
P.S .:我已经看过线程Searching concatenated field但这不会做,因为我真的需要搜索整个名称,而不仅仅是它的每个部分。
确定你有一个语法错误的原因是因为你正在尝试使用一个不属于的表别名 - 删除最后一个'name_str'和*语法*将是确定的,但查询仍然不会工作。你需要做的是使用明确的'JOIN's。您的字段列表不明确,您没有将'gatheringsitecoordinates'或派生表与其他表中的列匹配,将其余结果与其他结果绑定。你不需要执行派生表查询两次,你只需要'加入'它并使用'LIKE'的一个字段。你能解释一下你的表格模式吗? – DaveRandom 2012-08-07 10:18:20