
[英]How to easily split results in PHP with a LEFT JOIN mysql query?
[英]Repeat results query with LEFT JOIN in php MySQL
我尝试使用 LEFT JOIN 从 3 个表中获取数据。 当我保存这个主题的图像时,一个表(图像表)中的问题,例如每个主题在该表中有 4 个图像,所以现在当我查询以获取这些数据时,结果每次重复 4 次重复了 2 个其他表,但图片在每个查询中都在变化,最后我得到 4 个结果。 我该如何解决这个问题? 我需要 4 张图像,但不需要 4 次查询。
正如您将在我的表格示例中看到的那样,主题 ID 1 有 4 张图片:
table-1 : topic
+-------+-----------+-----------+-------------------+
| id | name | time | data |
+-------+-----------+-----------+-------------------+
| 1 | John | 1 | 214-444-1234 |
| 2 | Mary | 1 | 555-111-1234 |
| 3 | Jeff | 1 | 214-222-1234 |
| 4 | Bill | 1 | 817-333-1234 |
| 5 | Bob | 1 | 214-555-1234 |
+-------+-----------+-----------+-------------------+
table-2 : image
+-------+-----------+-----------+-------------+
| id | name | image | Id_Topic |
+-------+-----------+-----------+-------------+
| 1 | John | png | 1 |
| 2 | Mary | png | 1 |
| 3 | Jeff | png | 1 |
| 4 | Bill | png | 1 |
| 5 | Bob | png | 5 |
+-------+-----------+-----------+-------------+
table-3 : others
+-------+-----------+-----------+-------------------+
| id | name | city | phone |
+-------+-----------+-----------+-------------------+
| 1 | John | Uk | 214-444-1234 |
| 2 | Mary | Uk | 555-111-1234 |
| 3 | Jeff | Uk | 214-222-1234 |
| 4 | Bill | Uk | 817-333-1234 |
| 5 | Bob | Uk | 214-555-1234 |
+-------+-----------+-----------+-------------------+
我的查询如:
SELECT * FROM topics
LEFT JOIN image ON topics.id = image.Id_Topic
inner join Others ON topics.id = Others .id
where topics.id = ?
MySQL GROUP_CONCAT
是否满足您的需求?
SELECT topic.name, images.images
FROM topic
JOIN (
SELECT id_Topic, GROUP_CONCAT(DISTINCT image) images
FROM image GROUP BY id_Topic
) images ON topic.id = images.id_Topic
;
输出:
| name | images |
|------|---------------------|
| John | 1png,2png,3png,4png |
| Bob | 5png |
如您所见, GROUP_CONCAT
使用逗号连接多个图像链接,因此要显示每个图像,您需要使用后端编程语言以逗号分隔images
字符串,然后循环生成的数组并单独显示每个图像。
<?php
// get images string from database: $images_str
// ...
$images_arr = explode($images_str, ',');
foreach ( $images_arr as $image ) {
echo <<<IMG
<img src="$image">
IMG;
}
?>
上面的示例,主题名称“John”,输出:
<img src="1png">
<img src="2png">
<img src="3png">
<img src="4png">
-- create
CREATE TABLE topic (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE image (
id INTEGER PRIMARY KEY,
id_Topic INTEGER,
image TEXT NOT NULL,
name TEXT NOT NULL
);
-- insert
INSERT INTO topic VALUES (1, 'John'), (2, 'Mary'), (3, 'Jeff'), (4, 'Bill'), (5, 'Bob');
INSERT INTO image VALUES (1, 1, '1png', 'John'), (2, 1, '2png', 'Mary'), (3, 1, '3png', 'Jeff'), (4, 1, '4png', 'Bill'), (5, 5, '5png', 'Bob');
-- fetch
SELECT topic.name, images.images
FROM topic
JOIN (
SELECT id_Topic, GROUP_CONCAT(DISTINCT image) images
FROM image GROUP BY id_Topic
) images ON topic.id = images.id_Topic
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.