![](/img/trans.png)
[英]Select Different values from different tables based on id's with one query
[英]Select values from 2 different tables and print values in a row with the same ID
我有這個數據庫
表“ ADS”
ID | Visible
-----------------
15 | 1
16 | 1
17 | 1
表“ IMAGES_ADS”
ID | NAME | ID_ADS
------------------------------
100 | xlasd.jpg | 15
101 | dadsa.jpg | 15
102 | dsfsf.jpg | 16
103 | ghdfd.jpg | 17
104 | jkyhg.jpg | 17
105 | rerem.jpg | 17
現在,我想創建一個從這2個表中獲取值的php頁面,並按ID打印ADS列表,其中圖像名稱的一行與以逗號分隔的ADS ID相關。
我寫了這段代碼
<?php
//ENTER YOUR DATABASE CONNECTION INFO BELOW:
$servername = "localhost";
$username = "user";
$password = "xxxxxx";
$dbname = "dbname";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
echo 'CONNECT TO DB';
}
$sql = "SELECT ADS.ID, IMAGES_ADS.NAME FROM ADS INNER JOIN IMAGES_ADS ON ADS.ID=IMAGES_ADS.ID_ADS WHERE ADS.Visible=1 ORDER BY ID ASC";
$results = $conn->query($sql);
echo '<table>';
if($results->num_rows > 0) {
while($row = $results->fetch_assoc()) {
echo '<tr>
<td>'.$row["ID"].'</td>
<td>'.$row["NAME"].'</td>
</tr>';
}
} else {
echo '0 rows';
}
echo '</table>';
$conn->close();
?>
但是使用此代碼,我得到以下結果:
15 xlasd.jpg
15 dadsa.jpg
16 dsfsf.jpg
17 ghdfd.jpg
17 jkyhg.jpg
17 rerem.jpg
但是我需要這種結果:
15 xlasd.jpg, dadsa.jpg
16 dsfsf.jpg
17 ghdfd.jpg, jkyhg.jpg, rerem.jpg
我怎么能得到這個結果?
感謝@Vipin Jain,我在下面編寫了解決方案:
<?php
//ENTER YOUR DATABASE CONNECTION INFO BELOW:
$servername = "localhost";
$username = "user";
$password = "xxxxxx";
$dbname = "dbname";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
echo 'CONNECT TO DB';
}
$sql = "SELECT ADS.ID, GROUP_CONCAT(IMAGES_ADS.NAME SEPARATOR', ') as b
FROM ADS INNER JOIN IMAGES_ADS
ON ADS.ID=IMAGES_ADS.ID_ADS
WHERE ADS.Visible=1
ORDER BY ID ASC";
$results = $conn->query($sql);
echo '<table>';
if($results->num_rows > 0) {
while($row = $results->fetch_assoc()) {
echo '<tr>
<td>'.$row["ID"].'</td>
<td>'.$row["b"].'</td>
</tr>';
}
} else {
echo '0 rows';
}
echo '</table>';
$conn->close();
?>
您應該使用GROUP_CONCAT
SELECT ADS.ID, GROUP_CONCAT(IMAGES_ADS.NAME)
FROM ADS
INNER JOIN IMAGES_ADS
ON ADS.ID=IMAGES_ADS.ID_ADS
WHERE ADS.Visible=1
GROUP BY ID
ORDER BY ID ASC;
您可以通過以下查詢獲得-
SELECT a.ID, GROUP_CONCAT(b.NAME)
FROM ADS as a
INNER JOIN IMAGES_ADS as b
ON a.ID=b.ID_ADS
WHERE ADS.Visible=1
Group by a.ID;
$res = [];
while($row = $results->fetch_assoc()) {
if (empty($res[$row["ID"]])) {
$res[$row["ID"]] = [$row];
} else {
$res[$row["ID"]][] = $row;
}
}
您將獲得按ID分組的行數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.