将2列连接到1列

时间:2016-06-11 23:38:00

标签: php sql mysqli

我需要将2列连接到1列,但我无法弄清楚如何连接这些列。 这就是它的样子:

表(预约)

-------------------------------------------
| id | home | salesman | buyer |   date   |
| 1  |  3   |    2     |   4   | 12-6-2016|
| 2  |  1   |    1     |   3   | 15-6-2016|
| 3  |  2   |    5     |   6   | 20-6-2016|
-------------------------------------------

表(人)

---------------------------------------------------------
| id | name |      email     | phonenumber | permission |
| 1  | John | John@gmail.com |  12345678   |     1      |
| 2  | Jack | Jack@gmail.com |  12345678   |     1      |
| 3  | Henk | Henk@gmail.com |  12345678   |     0      |
| 4  | Mike | Mike@gmail.com |  12345678   |     0      |
| 5  | Tom  | Tom@gmail.com  |  12345678   |     1      |
| 6  | Ben  | Ben@gmail.com  |  12345678   |     0      |
---------------------------------------------------------

表(主)

--------------------------------------
| id | salesman |  price  |  city    |
| 1  |    2     |  123000 | London   |
| 2  |    1     |  123000 | New York |
| 3  |    5     |  123000 |  Paris   |
--------------------------------------

这就是我想在php页面上看到它的方式:

-------------------------------------------------
| home            | salesman | buyer |   date   |
| Home in Paris   |   Jack   |  Mike | 12-6-2016|
| Home in London  |   John   |  Henk | 15-6-2016|
| Home in New York|   Tom    |  Ben  | 20-6-2016|
-------------------------------------------------

获得许可的人1是推销员,权限0是购买者。

所以我的问题是,如何将数字更改为正确的值?不将表约会中的数字更改为数据库中的值...

我对SQL知之甚少,所以有人可以提供一个不是示例的解决方案,并且可以使用我的表和列吗?

修改

表(afspraak)

-------------------------------------------
| id | huis | verkoper | koper |  datum   |
| 1  |  3   |    2     |   4   | 12-6-2016|
| 2  |  1   |    1     |   3   | 15-6-2016|
| 3  |  2   |    5     |   6   | 20-6-2016|
-------------------------------------------

表(persoon)

---------------------------------------------------------
| id | naam |      email     | phonenumber | rechten    |
| 1  | John | John@gmail.com |  12345678   |     1      |
| 2  | Jack | Jack@gmail.com |  12345678   |     1      |
| 3  | Henk | Henk@gmail.com |  12345678   |     0      |
| 4  | Mike | Mike@gmail.com |  12345678   |     0      |
| 5  | Tom  | Tom@gmail.com  |  12345678   |     1      |
| 6  | Ben  | Ben@gmail.com  |  12345678   |     0      |
---------------------------------------------------------

表(Huis区)

--------------------------------------
| id | verkoper |  prijs  |   stad   |
| 1  |    2     |  123000 | London   |
| 2  |    1     |  123000 | New York |
| 3  |    5     |  123000 |  Paris   |
--------------------------------------

我的PHP代码:

include('config.php');
$getAfspraak = "SELECT CONCAT('Home in ', HO.stad) AS Home,
   SA.`naam` AS verkoper,
   BU.`naam` AS koper,
   AP.`datum`
FROM afspraak AP
INNER JOIN huis HO ON HO.id = AP.huis
INNER JOIN persoon SA ON SA.id = AP.verkoper AND SA.rechten = 1
INNER JOIN persoon BU ON BU.id = AP.koper AND BU.rechten = 0";
//Inner join for huis   SELECT afspraak.huis, huis.stad FROM afspraak INNER JOIN huis ON afspraak.huis = huis.id; This query should show "huis in [stad]" it means, a home in London.
$dataAfspraak = mysqli_query($con, $getAfspraak) or die(mysqli_error($con));



<table cellspacing=1 border=0 width=100%>
    <tr>
        <th>Koper</th>
        <th>Verkoper</th>
        <th>Huis</th>
        <th>Datum</th>
    </tr>
<?php while($resAfspraak = mysqli_fetch_assoc($dataAfspraak)): ?>
    <tr>
        <td><?php echo $resAfspraak['koper']?></td> <!-- value is naam if the row has 0 at rechten -->
        <td><?php echo $resAfspraak['verkoper']?></td> <!-- value is naam if the row has 1 at rechten -->
        <td><?php echo $resAfspraak['huis']?></td>
        <td><?php echo $resAfspraak['datum']?></td>
    </tr>
<?php endwhile;?>

1 个答案:

答案 0 :(得分:0)

通过以下JOINCONCAT查询,您可以获得预期的结果:

SELECT CONCAT('Home in ', HO.city) AS Home,
       SA.`Name` AS Salesman,
       BU.`Name` AS Buyer,
       AP.`Date`
FROM Appointment AP
INNER JOIN Home HO ON HO.Id = AP.Home
INNER JOIN Person SA ON SA.Id = AP.Salesman AND SA.Permission = 1
INNER JOIN Person BU ON BU.Id = AP.Buyer AND BU.Permission = 0

<强>更新

您无需从单独的联接中获取huis值。以下查询返回koper, verkoper, huisdatum值。

$getAfspraak = "SELECT BU.naam AS koper, SA.naam AS verkoper, CONCAT('Huis in ', HO.stad) AS Huis, AP.datum 
FROM afspraak AP 
INNER JOIN huis HO ON HO.id = AP.huis 
INNER JOIN persoon SA ON SA.id = AP.verkoper AND SA.rechten = 1 
INNER JOIN persoon BU ON BU.id = AP.koper AND BU.rechten = 0";
$dataAfspraak = mysqli_query($con, $getAfspraak) or die(mysqli_error($con));