首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从2列中检索每个数字组合

问如何从2列中检索每个数字组合
EN

Stack Overflow用户
提问于 2014-01-13 18:22:47
回答 3查看 150关注 0票数 0

我正在设法从一个表中的两个列中检索每个值的组合,其中每个组合都与第三列中的值匹配。

假设表的一部分如下所示:

代码语言:javascript
复制
products_id     options_id     options_values_id
1487            2              1
1487            2              61
1487            3              60 
1487            5              52

在使用products_id 1487时,我想要的输出是以下两个字符串:

代码语言:javascript
复制
2-1, 3-60, 5-52
2-61, 3-60, 5-52

我有这样的印象,即这些字符串需要递归组装,但是我遇到了困难,因为并不是每个products_id都有相同的options_ids或相同数量的字符串。

编辑了添加:--我尝试过以下几种解决方案的变体,但都没有效果。我想我应该说得更详细些。

我试图让它检索唯一的options_id及其相应的options_values_id的每一个组合。(换句话说,并不是这两列中所有可能的数字组合。)Options_id代表“颜色”和“大小”这样的产品选项,而options_values_id则代表这些选项的选择,比如“红色”或“小”。因此,我试图为给定的products_id提供各种可能的选项组合。在上面的例子中,该项目有两个可能的选项组合-- "2-1,3-60,5-52“和"2-61,3-60,5-52”。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-13 18:26:00

为每个不同的选项加入了针对自己的表.

首先进行选择以检索选项的数量。

代码语言:javascript
复制
$tables = array();
$rs = mysql_query(
  'SELECT DISTINCT options_id FROM table WHERE products_id = '.$id);
while ($row = mysql_fetch_row($rs)) {
  $tables[$row['options_id']] =
    'SELECT options_values_id FROM table WHERE products_id = '.$id.
    ' AND options_id = '.$row['options_id'];
}
mysql_free_result($rs);

然后,对于每个选项,将其作为查询中的一个单独的表加入。不要包含任何比较值的连接子句,只需将每条记录与每条其他记录连接。

代码语言:javascript
复制
$sql = 'SELECT ';
$count = 0;
foreach ($tables AS $id => $query) {
  if ($count++) $sql .= ', ;
  $sql .= 'table_'.$id.'.options_values_id AS value_'.$id;
}
$sql .= ' FROM ';
$count = 0;
foreach ($tables AS $id => $query) {
  if ($count++) $sql .= ', ';
  $sql .= '('.$query.') AS table_'.$id;
}

最后,执行该查询。每一行将包含每个options_id的一列。每个值的唯一组合将有一行。

票数 -1
EN

Stack Overflow用户

发布于 2014-01-13 18:48:37

或者对于混合的php/sql方法,尝试使用该SQL查询:

代码语言:javascript
复制
SELECT products_id, options_id, options_values_id WHERE products_id = '$var_with_product_id';

将结果提取到数组中,例如$results:

代码语言:javascript
复制
$pairs = array();
foreach($results as $result) {
    // build array with pairs (array_push to avoid overwriting)
    array_push($pairs, array( $result['options_id'] => $result['options_values_id'];
}
// a bit extra complication, as array_push adds e.g. [0] => array( options_id => options_values_id ) :)
$pairs = array_values($pairs);
// check for double options_id
$found_double_options_id = false;
do {
    // check for duplicates... use a lot of array functions
} while (count($pairs) && $found_double_options_id);
票数 -1
EN

Stack Overflow用户

发布于 2014-01-13 18:58:15

“每一个组合”都是笛卡尔积

代码语言:javascript
复制
SELECT DISTINCT e1.options_id, e2.options_values_id
  FROM Entity e1, Entity e2
  WHERE e1.products_id = 1487 AND e2.products_id=1487
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21098558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档