我正在设法从一个表中的两个列中检索每个值的组合,其中每个组合都与第三列中的值匹配。
假设表的一部分如下所示:
products_id options_id options_values_id
1487 2 1
1487 2 61
1487 3 60
1487 5 52在使用products_id 1487时,我想要的输出是以下两个字符串:
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”。
发布于 2014-01-13 18:26:00
为每个不同的选项加入了针对自己的表.
首先进行选择以检索选项的数量。
$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);然后,对于每个选项,将其作为查询中的一个单独的表加入。不要包含任何比较值的连接子句,只需将每条记录与每条其他记录连接。
$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的一列。每个值的唯一组合将有一行。
发布于 2014-01-13 18:48:37
或者对于混合的php/sql方法,尝试使用该SQL查询:
SELECT products_id, options_id, options_values_id WHERE products_id = '$var_with_product_id';将结果提取到数组中,例如$results:
$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);发布于 2014-01-13 18:58:15
“每一个组合”都是笛卡尔积
SELECT DISTINCT e1.options_id, e2.options_values_id
FROM Entity e1, Entity e2
WHERE e1.products_id = 1487 AND e2.products_id=1487https://stackoverflow.com/questions/21098558
复制相似问题