我目前正在为一所学校项目工作。我有2个SQL表和一个表来连接这两个。表格包含人,表2包含卡。 connect表包含一个主键和2个值。价值是一个人的主要钥匙,另一个是汽车的主要钥匙。这张桌子将人们与汽车联系起来。有了这个,我可以在PHP中创建一个表格,我可以看到谁有车。
这种方法很好,但是每个有多辆车的人都会出现不止一次。因此,例如:第一个人同时拥有第一辆车和第二辆车。该表现在显示人的名字2次,并在他的名字后面显示汽车。我希望它只显示一个人的名字,然后是一辆或多辆汽车。
以下是我现在设置方式的示例:
$query = "SELECT firstname, lastname, car FROM people, cars, connecttabel
WHERE connecttabel.personnumber = people.personnumer
AND connecttabel.carnumber = cars.carnumber";
$result = mysqli_query($database, $query)
or die ("error");
echo "<table>";
while($record=mysqli_fetch_array($result))
{$firstname = $record['firstname'];
等等。用变量我填写表格。
有谁知道如何帮助我?我认为它应该用for循环完成,但我已经尝试了最后3个小时,我无法完成它。
答案 0 :(得分:1)
我假设您的查询返回类似于:
| first_name | last_name | car |
+------------------------------------------+
| John | Doe | Mustang |
| John | Doe | Camaro |
| John | Doe | SL55 |
| Jane | Deo | Prius |
| Jane | Deo | Renegade|
如果您只想要每辆车的车数,您可以尝试:
SELECT firstname, lastname, COUNT(car) FROM people, cars, connecttabel
WHERE connecttabel.personnumber = people.personnumer
AND connecttabel.carnumber = cars.carnumber GROUP BY firstname, lastname;
这会给你:
| first_name | last_name |COUNT(car)|
+-------------------------------------------+
| John | Doe | 3 |
| Jane | Deo | 2 |
但如果你想要像......那样的东西。
| first_name | last_name | car_list |
---------------------------------------------------------+
| John | Doe | Mustang, Camaro, SL55 |
| Jane | Deo | Renegade, Prius |
您可以使用Group Concat:
SELECT firstname, lastname, GROUP_CONCAT(DISTINCT car ORDER BY car) AS car_list FROM people, cars, connecttabel
WHERE connecttabel.personnumber = people.personnumer
AND connecttabel.carnumber = cars.carnumber GROUP BY firstname, lastname
答案 1 :(得分:0)
$query = "SELECT firstname, lastname, car FROM people, cars, connecttabel
WHERE connecttabel.personnumber = people.personnumer
AND connecttabel.carnumber = cars.carnumber Group by people.id";
$result = mysqli_query($database, $query)
or die ("error");
echo "<table>";
while($record=mysqli_fetch_array($result))
{$firstname = $record['firstname'];