【发布时间】:2011-01-09 18:01:19
【问题描述】:
这是my previous one 的后续问题。
情况:
Table 1:
+--------------------+--------------------+
| v_id | v_name |
+--------------------+--------------------+
| 1 | v_name1 |
+--------------------+--------------------+
| etc...
Table 2:
+--------------------+--------------------+
| a_id | a_name |
+--------------------+--------------------+
| 1 | a_name1 |
+--------------------+--------------------+
| etc...
Table 3:
+--------------------+--------------------+
| v_id | a_id |
+--------------------+--------------------+
| 1 | 1 |
+--------------------+--------------------+
| 1 | 2 |
+--------------------+--------------------+
| 1 | 3 |
+--------------------+--------------------+
我想连接两个表:
SELECT t1.*, t2.a_name
FROM `table1` t1
LEFT JOIN `table_3` t3 ON t3.v_id = t1.v_id
LEFT JOIN `table_2` t2 ON t2.a_id = t3.a_id
WHERE t1.id = 1;
此查询的结果将是给定表的 3 行,每行的值与 Table 1 相同,只是 a_name 与 Table 3 不同。
现在,我是否可以将a_name 设为一个数组(在这种情况下为 3 个单元格)?我认为这是不可能的。如果不是,我将如何构建查询以便它只返回一行,a_name 结果与给定的“胶水”字符串连接?
编辑 如果我要在 PHP 中得到结果,我会期待这样的结果:
$result = array(
'v_id' => 1,
'a_name' => array('a_name1', 'a_name2', 'a_name3')
);
或
$result = array(
'v_id' => 1,
'a_name' =>'a_name1, a_name2, a_name3'), # assuming I used ', ' as the glue string
);
【问题讨论】:
-
SQL 上没有任何数组数据类型 - 请发布一个示例,说明您的预期输出应该是什么样子。听起来像 GROUP_CONCAT...
-
我建议你不要实现这个。您的原始查询很好,是推荐的方法。
-
@Mark Byers:我知道潜在的陷阱。我只是想知道如何减少从应用程序到数据库的连接数量并直接从中获取更多详细信息。
-
好吧...没关系 - 你比我更了解你的问题,所以我不知道什么最适合你。祝你好运,注意名称中的逗号。
标签: sql mysql database join multidimensional-array