gpt4 book ai didi

php - 为内部联接查询中的一个字段选择不同的值

转载 作者:可可西里 更新时间:2023-11-01 07:17:46 24 4
gpt4 key购买 nike

我想从两个表创建总结报告。一个表 project_type 另一个 ffw

ffw:

|-----------------------------------------------------------------------|
| ffw_id | division_id | district_id | project_type_id | name
|-----------------------------------------------------------------------|
| 1 | 30 | 1 | 2 |myAddress
|-----------------------------------------------------------------------|
| 2 | 12 | 2 | 1 | Asdfads |
|-----------------------------------------------------------------------|
| 3 | 30 | 6 | 1 | kkkkk |
|-----------------------------------------------------------------------|
| .. | .. | .. | .. | ..... |
|-----------------------------------------------------------------------|

project_type:

|--------------------------------
| project_type_id | project_type |
|--------------------------------|
| 1 | food |
|--------------------------------|
| 2 | work |
|--------------------------------|
| 3 | visit |
|--------------------------------|
| .. | .. |
|--------------------------------|

在应用 division_id 条件后,我希望从这两个表中得到的结果是

|-------------------------------------------|
| no | project_type | count |
|-------------------------------------------|
| 1 | food | 2 |
|-------------------------------------------|
| 2 | work | 1 |
|-------------------------------------------|
| 3 | visit | . |
|-------------------------------------------|
| .. | .. | .. |
|-------------------------------------------|

我正在尝试这段代码,但它在 while 循环中显示重复值

$qry = "
SELECT * FROM `project_type`
LEFT JOIN `ffw`
ON project_type.project_type_id = ffw.project_type_id
WHERE 1
";

if (strlen($_POST["division_id"]) > 0 && $_POST["division_id"] != "0")
{
$qry .= " AND division_id = '".$_POST["division_id"]."'";
}

$query = mysql_query($qry);

最佳答案

您可以使用 GROUP BY 来汇总结果,如下所示:

SELECT pt.project_type, count(*) as count FROM project_type pt
LEFT JOIN ffw ff ON ff.project_type_id = pt.project_type_id
GROUP BY pt.project_type

此查询将返回您的记录摘要。

这是使用 MYSQLi 面向对象的代码的完整示例:

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT pt.project_type, count(*) as count FROM project_type pt
LEFT JOIN ffw ff ON ff.project_type_id = pt.project_type_id
WHERE 1 = 1
";


if(strlen($_POST["division_id"])> 0 && $_POST["division_id"]!="0")
{
$sql.= " AND division_id = '".$_POST["division_id"]."'";
}

$sql .= "GROUP BY pt.project_type";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
$i = 1;
// output data of each row
while($row = $result->fetch_assoc()) {
echo $id. " - Name: " . $row["project_type"]. " " . $row["count"]. "<br>";
$i++;
}
}
else
{
echo "0 results";
}
$conn->close();

Side Note: I suggest to use mysqli_* OR PDO, because mysql_* is deprecated and its not available in PHP 7

关于php - 为内部联接查询中的一个字段选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34605299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com