php – 如何通过文章递归地从表中获取所有类似物?
发布时间:2020-05-25 09:06:23 所属栏目:PHP 来源:互联网
导读:我创建了一个简单的类比表: +----+-------+-------+| id | sku_1 | sku_2 |+----+-------+-------+| 1 | a1 | abcd || 2 | a2 | a3 || 3 | a3 | a1 |+----+-------+-------+3 rows in set (0.00 sec)
|
我创建了一个简单的类比表: +----+-------+-------+ | id | sku_1 | sku_2 | +----+-------+-------+ | 1 | a1 | abcd | | 2 | a2 | a3 | | 3 | a3 | a1 | +----+-------+-------+ 3 rows in set (0.00 sec) 什么意思?这意味着具有物品abcd的产品具有与物品a1类似的物品,否则例如具有物品a3的产品具有与物品a1类似的物品. 如何以单篇文章递归获取此表中的所有产品? 我的解决方案是错的: // Small Class to get analogs of products
class Analogs {
public function get_analogs($sku)
{
if (!$sku) return false;
$link = mysql_connect('localhost','','');
mysql_select_db('test');
$sku = mysql_real_escape_string($sku,$link);
$query = mysql_query("SELECT * FROM analogs WHERE sku_1='".$sku."' OR sku_2='".$sku."'");
while($analogs[]=mysql_fetch_assoc($query))
continue;
return $analogs;
}
public function MixedAnalogs($sku)
{
if (!$sku) return false;
$link = mysql_connect('localhost',$link);
$query = mysql_query("select sku_1 sku from analogs where sku_2 = '$sku' UNION
select sku_2 sku from analogs where sku_1 = '$sku'");
while($analogs[]=mysql_fetch_assoc($query))
continue;
return $analogs;
}
}
$mixed_analogs = AnalogsMix('abcd',$ids=array());
echo "<pre>";
print_r($mixed_analogs);
echo "</pre>";
// Recursive function to get analogs of analog
function AnalogsMix($sku,$ids=array())
{
$class_analogs = new Analogs();
$analogs = $class_analogs->get_analogs($sku);
foreach ($analogs as $analog)
{
$cross = null;
if ($analog['sku_1']==$sku)
{
$cross->sku = $analog['sku_2'];
}
else
{
$cross->sku = $analog['sku_1'];
}
$cross->id = $analog['id'];
if (!in_array($analog['id'],$ids))
{
$ids[] = $analog['id'];
$mixed[] = AnalogsMix($cross->sku,$ids);
}
}
if (isset($mixed))
{
return $mixed;
}
else
{
return false;
}
}
SQL UNION
select sku_1 sku from analogs where sku_2 = $yourid union select sku_2 sku from analogs where sku_1 = $yourid 然后你将得到结果只有类似物的ID. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
