我已經創建類似物的一個簡單的表:如何從文章中遞歸獲取表格中的所有類似物?
+----+-------+-------+
| 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','','');
mysql_select_db('test');
$sku = mysql_real_escape_string($sku,$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;
}
}
1.您不使用'mysql_real_escape_string'來正確轉義'$ sku'。 2.請注意,不推薦使用'mysql_ *'函數(請參閱[red box](http://php.net/mysql_query))。 3.怎麼了?它目前輸出什麼,它應該輸出什麼? – 2013-03-25 14:35:14
爲了確保我理解了這個問題,您期望您提供的示例有什麼結果? – Fabien 2013-03-25 14:36:04
@Marcel Korpel。我不打算在我的真實服務器上使用它,它只是一個抽象的例子。和@Fabien,如果我把'abcd'放到這裏,我必須得到所有的類似物,因爲'abcd'有模擬信號作爲'a1','a1'有'a3'的模擬信號,'a3'有模擬信號作爲'a2'。 ,所以函數必須返回所有的類比。 – Smash 2013-03-25 14:40:11