0

我有一个查询:

SELECT * FROM match ORDER BY id ASC

结果将有这些:

身份证姓名年龄
1 玛丽 18
2爱德华18
3 仁 22

我想配对 Mary 和 Edward,因为他们的年龄相同: 预期结果将是:

1. 玛丽
      ID 1 年龄 18 匹配 ID 2 爱德华年龄 18
2.爱德华
      ID 2 年龄 18 匹配 ID 1 玛丽年龄 18
3.仁
      ID 3 年龄 22 匹配到没有配对

我想用相应的对连续两次插入这对。

这是我的代码:

$result = mysql_query("SELECT * FROM match ORDER BY id ASC");
$size_of_array = sizeof($result);
$i = 1;
while($data = mysql_fetch_row($result)) {
     $pair_A  = $data[0];
     while ($i <= $size_of_array) {
            $pair_B  = $data[$i];

            $insert_A = array(
                              'id'  =>  $pair_A['id'],
                              'name' => $pair_A['name'],
                              'age'  => $pair_A['age'],
                              'partnerName' => $pair_B['name'],
                              'partnerAge'  => $pair_B['age']
                              'partnerID'   => $pair_B['id']
                              );
            //insert statement 1
            $insert_B = array(
                              'id'  =>  $pair_B['id'],
                              'name' => $pair_B['name'],
                              'age'  => $pair_B['age'],
                              'partnerName' => $pair_A['name'],
                              'partnerAge'  => $pair_A['age']
                              'partnerID'   => $pair_A['id']
                              );
            //insert statement 2

            //Remove duplicates
            unset($pair_A);
            unset($pair_B);
            $i++;
     } 
}

任何其他建议或代码使它变得容易?

4

1 回答 1

0

如果我理解正确,您可以用一个语句完成所有操作

INSERT INTO match_pairs (ID, Name, Age, PartnerID, PartnerName, PartnerAge)
SELECT m1.id, m1.name, m1.age,
       m2.id partnerid, m2.name partnername, m2.age partnerage
  FROM `match` m1 LEFT JOIN `match` m2
    ON m1.age = m2.age AND m1.id <> m2.id
 ORDER BY m1.id

结果是match_pairs

+--------+--------+------+------------+-------------+ ------------+
| 身份证 | 姓名 | 年龄 | 合作伙伴 ID | 合作伙伴名称 | 合伙人时代 |
+--------+--------+------+------------+-------------+ ------------+
| 1 | 玛丽 | 18 | 2 | 爱德华 | 18 |
| 2 | 爱德华 | 18 | 1 | 玛丽 | 18 |
| 3 | 仁 | 22 | 空 | 空 | 空 |
+--------+--------+------+------------+-------------+ ------------+

这里是SQLFiddle演示
这里是SQLFiddle演示(有两个以上的同龄人


在 php 方面,它归结为

$sql = "INSERT INTO match_pairs (ID, Name, Age, PartnerID, PartnerName, PartnerAge)
        SELECT m1.id, m1.name, m1.age,
               m2.id partnerid, m2.name partnername, m2.age partnerage
          FROM `match` m1 LEFT JOIN `match` m2
            ON m1.age = m2.age AND m1.id <> m2.id
         ORDER BY m1.id";

$result = mysql_query($sql);
if (!$result) {
    die('Invalid query: ' . mysql_error()); //TODO better error handling
}
于 2013-09-28T06:02:23.443 回答