基本上我while
两次获得主要组&团体价值。实施例
$group_query = $db->query("
SELECT opt_id, opt_type
FROM ads_options
WHERE opt_id = '" . intval($data['ad_id']) . "'
GROUP BY opt_type");
while ($group_data = $db->fetch($group_query)) {
$option_query = $db->query("
SELECT *
FROM ads_options
WHERE opt_id = '" . intval($data['ad_id']) . "'
AND opt_type ='" . $group_data['opt_type'] . "'
ORDER BY opt_id DESC");
while ($option_data = $db->fetch($option_query)) {
}
}
输出:
Size : S
M
L
Color : White
Black
问题:
如何使用单个语句加入上面的当前查询?
更新:
当前数据库结构
opt_id opt_type opt_name opt_price
1236 Size S 0
1236 Size M 1
1236 Color Black 1
1236 Color White 2
答案 0 :(得分:1)
这样的东西会获得独特的组合,可能会有所帮助
$group_query = $db->query("
SELECT
DISTINCT opt_id, opt_type, opt_size
FROM ads_options
WHERE opt_id = " . intval($data['ad_id']) . "
ORDER BY opt_type, opt_size");
如果您能够提供更多关于您要实现的目标的详细信息,以及ads_options的完整设计,那么提供更具体的建议会更容易
同样是次要注释,如果opt_id是数字,那么您在查询中不需要单引号(')(在示例中将其删除)
修改强> 类似下面的内容会返回一个id,type的列表,然后作为第三个字段返回一个以逗号分隔的值列表,如果有更多的帮助
$group_query = $db->query("
SELECT
opt_id, opt_type, GROUP_CONCAT(opt_name) AS opt_names
FROM ads_options
WHERE opt_id = " . intval($data['ad_id']) . "
ORDER BY opt_type");
有关GROUP_CONCAT的更多信息,请查看此链接http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
我不知道PHP是否以编程方式提供了一些帮助,我倾向于使用Coldfusion,所以如果有人知道执行以下操作的PHP版本,那么这似乎与OP要求的相匹配
<cfoutput query="qryAdOptions" group="opt_type">
#qryAdOptions.opt_type#
<cfoutput>
#qryAdOptions.opt_name#
</cfoutput>
</cfoutput>
http://bytes.com/topic/php/answers/11929-grouping-results-query#post50606似乎暗示以下内容可能与我在上面发布的内容相匹配,因此可能有用
$answer = array();
while ($row = pg_fetch_array($results)) {
if (!isset($answer[$row["obj_type"]])) {
$answer[$row["obj_type"]] = array();
}
$answer[$row["obj_type"]][] = $row;
}
然后迭代$ answer。
可以很好地发挥作用SELECT * FROM ads_options WHERE opt_id = ......