Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL跨两行查找全名_Mysql - Fatal编程技术网

MySQL跨两行查找全名

MySQL跨两行查找全名,mysql,Mysql,我有一个MySQL表,我试图通过他的全名找到一个人。问题是名字和姓氏存储在表中的两个单独的行中,如下所示: +-----------------+-------------+-------------+--------------+ | submit_time | form_name | field_name | field_value | +-----------------+-------------+-------------+--------------+ | 13234

我有一个MySQL表,我试图通过他的全名找到一个人。问题是名字和姓氏存储在表中的两个单独的行中,如下所示:

+-----------------+-------------+-------------+--------------+
| submit_time     | form_name   | field_name  | field_value  |
+-----------------+-------------+-------------+--------------+
| 1323463601.0947 | Online Form | firstname   | Paulo        |
| 1323463601.0947 | Online Form | lastname    | Hill         |
+-----------------+-------------+-------------+--------------+
如果可能的话,我如何通过搜索Paulo Hill来构造一个将得到单个结果的查询

此外,提交时间列的两行值应相同,这将是表中唯一的一列值。

假设“paulo hill”是单个搜索查询:

    SELECT t1.*,
           t2.field_value
      FROM tbl t1
INNER JOIN tbl t2 ON t1.submit_time = t2.submit_time
       AND t2.field_name = 'lastname'
     WHERE t1.field_name = 'firstname'
       AND t1.field_value || ' ' || t2.field_value = 'paulo hill'
注意:此解决方案对搜索查询中名和姓之间的空格量敏感

假设“paulo hill”是单个搜索查询:

    SELECT t1.*,
           t2.field_value
      FROM tbl t1
INNER JOIN tbl t2 ON t1.submit_time = t2.submit_time
       AND t2.field_name = 'lastname'
     WHERE t1.field_name = 'firstname'
       AND t1.field_value || ' ' || t2.field_value = 'paulo hill'

注意:此解决方案对搜索查询中名字和姓氏之间的空格量很敏感

您可以使用自联接:

SELECT t1.submit_time, t1.field_value, t2.field_value
FROM your_table t1
INNER JOIN your_table t2 ON t2.submit_time = t1.submit_time
WHERE t1.field_name = 'firstname'
AND t1.field_value = 'Paulo'
AND t2.field_name = 'lastname'
AND t2.field_value = 'Hill'

您可以使用自联接:

SELECT t1.submit_time, t1.field_value, t2.field_value
FROM your_table t1
INNER JOIN your_table t2 ON t2.submit_time = t1.submit_time
WHERE t1.field_name = 'firstname'
AND t1.field_value = 'Paulo'
AND t2.field_name = 'lastname'
AND t2.field_value = 'Hill'
试试这个:

SELECT * FROM (
  SELECT submit_time, group_concat(field_value SEPARATOR  ' ')  AS fullname
  FROM TABLE_NAME
  GROUP BY `submit_time`
) AS innertable
WHERE fullname='Paulo Hill'
试试这个:

SELECT * FROM (
  SELECT submit_time, group_concat(field_value SEPARATOR  ' ')  AS fullname
  FROM TABLE_NAME
  GROUP BY `submit_time`
) AS innertable
WHERE fullname='Paulo Hill'
一种选择是,如果您知道订单,则使用:

SELECT GROUP_CONCAT(field_value SEPARATOR ' ') 
FROM tab
GROUP BY submit_time
HAVING GROUP_CONCAT(field_value ORDER BY field_id ASC) LIKE '%Paulo,Hill%'
一种选择是,如果您知道订单,则使用:

SELECT GROUP_CONCAT(field_value SEPARATOR ' ') 
FROM tab
GROUP BY submit_time
HAVING GROUP_CONCAT(field_value ORDER BY field_id ASC) LIKE '%Paulo,Hill%'

看起来像EAV数据模型,只是我没有看到任何实体ID将这两行链接在一起。这些都是列吗?如果每行的提交时间相同,那么它在表中怎么可能是唯一的?您确定不能同时合并两个表单吗?看起来像EAV数据模型,只是我没有看到任何实体ID将这两行链接在一起。这些都是列吗?如果每行的提交时间相同,那么它在表中怎么可能是唯一的?你确定不能同时使用两种形式吗?@PabloSantaCruz“Paulo Hill”是搜索词。。。你的确切意思是什么?@PabloSantaCruz“Paulo Hill”是搜索词。。。你的确切意思是什么?你的第一个查询将找到保罗·希尔,但由于你没有限制字段名称,它也可能得到误报,比如一个名叫乔纳·希尔的人带着一只名叫保罗的狗,或者一个住在山上的名叫保罗·史密斯的人,等等。@Ike Walker:是的,那么就把它删除吧,因为它无论如何都不是答案,所以你的第一个查询会找到保罗·希尔,但因为你没有限制字段名称,它也可能会得到误报,比如一个叫乔纳·希尔的人带着一只叫保罗的狗,或者一个住在山上的叫保罗·史密斯的人,等等。@Ike Walker:是的,那么就把它删除吧,因为它不是答案Group by不定义其他列的顺序Group by不定义其他列的顺序Group by不定义其他列的顺序Group by不定义其他列的顺序Group by不定义其他列的顺序