搜索连接的植物名称

时间:2012-08-07 10:07:26

标签: php mysql database concat

我正在用 PHP 编写一个程序来搜索集合数据库中的工厂名称。您应该能够键入科学植物名称(例如Rumex acetosa或Medicago x varia)以查找该名称上的所有信息。植物名称是雾化的,因此每个名称由两到五个部分组成。我不想单独搜索每个部分,但我需要将它们全部添加到一个名称。

所以我尝试做的是写一个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服务器版本对应的手册,以便在第2行name_str LIKE 'rum%'附近使用正确的语法

为了让您了解最终应该是什么样子浏览http://bgbm3.bgbm.fu-berlin.de/iopi/gpc/query.asp

我是一个完整的Sql-newb所以也许有人可以帮助我!

谢谢!

P.S。:我已经看过线程Searching concatenated field,但这不行,因为我真的需要搜索整个名称,而不仅是每个部分。

2 个答案:

答案 0 :(得分:0)

您需要添加WHERE子句 - 就像这样......

... epithet ) FROM name ) WHERE name_str LIKE ...

答案 1 :(得分:0)

您的查询包含没有命名列的子查询。我最接近的猜测是你想要这样的东西:

SELECT observationid, fullnamestring, latitudedecimal, longitudedecimal
FROM  observation o join
      (SELECT CONCAT(genusormonomial, firstepithet, rank, hybridflag, intraspecificepithet) as name_str,
              name.*
       FROM name
      ) n
      on o.nameid = n.nameid
WHERE o.sitecoordinateid = o.fkgatheringsite AND
      namestr like <'" . mysql_real_escape_string($sucharray[0]) . "'>

然而,这是gatheringsitecoordinates.sitecoordinateid的问题,因为没有名为gatheringsitecoordinates的表。上面,我认为它是观察的一部分。如果它是一个单独的表,那么你可能想要这样的东西:

SELECT observationid, fullnamestring, latitudedecimal, longitudedecimal
FROM  observation o join
      (SELECT CONCAT(genusormonomial, firstepithet, rank, hybridflag, intraspecificepithet) as name_str,
              name.*
       FROM name
      ) n
      on o.nameid = n.nameid join
      gatheringsitecoordinates gsc
      on o.sitecoordinateid = o.fkgatheringsite 
WHERE namestr like <'" . mysql_real_escape_string($sucharray[0]) . "'>

另外,我已将此表示为没有字符串表示法的常规sql。