1

フルネームで人を見つけようとしているMySQLテーブルがあります。問題は、次に示すように、姓と名がテーブル内の 2 つの別々の行に格納されることです。

+-----------------+-------------+-------------+--------------+
| submit_time     | form_name   | field_name  | field_value  |
+-----------------+-------------+-------------+--------------+
| 1323463601.0947 | Online Form | firstname   | Paulo        |
| 1323463601.0947 | Online Form | lastname    | Hill         |
+-----------------+-------------+-------------+--------------+

Paulo Hill を検索して (可能であれば) 単一の結果を取得するクエリを作成するにはどうすればよいですか?

また、submit_time 列は両方の行で同じ値を持つ必要があります。これは、テーブル内で一意の 1 つの列の値になります。

4

4 に答える 4

4

自己結合を使用できます。

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'
于 2012-04-23T21:14:01.543 に答える
2

単一'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'

注: このソリューションは、検索クエリの名と姓の間のスペースの量に敏感です

于 2012-04-23T21:12:51.043 に答える
1

これを試して:

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'
于 2012-04-23T21:16:52.603 に答える
0

1 つの代替方法は、順序がわかっている場合はGROUP_CONCATを使用することです。

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%'
于 2012-04-23T21:26:52.543 に答える