Ho creare un semplice tavolo di analoghi:Come ottenere in modo ricorsivo tutti gli analoghi dal tavolo di un articolo?
+----+-------+-------+
| id | sku_1 | sku_2 |
+----+-------+-------+
| 1 | a1 | abcd |
| 2 | a2 | a3 |
| 3 | a3 | a1 |
+----+-------+-------+
3 rows in set (0.00 sec)
Cosa significa? Significa che il prodotto con l'articolo abcd
ha un analogo all'articolo a1
, altrimenti per esempio il prodotto con l'articolo a3
ha un analogo all'articolo a1
.
Come ottenere in modo ricorsivo tutti i prodotti da questa tabella con un singolo articolo?
mie soluzioni è sbagliato:
// 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. Non si usa 'mysql_real_escape_string' per uscire correttamente da' $ sku'. 2. Si noti che le funzioni di 'mysql_ *' sono deprecate (si veda la [scatola rossa] (http://php.net/mysql_query)). 3. Cosa c'è che non va? Cosa emette al momento e cosa dovrebbe produrre? –
Giusto per essere sicuro di capire la domanda, quale risultato ti aspetti dall'esempio che hai fornito? – Fabien
@Marcel Korpel. Non lo userò sul mio vero server, è solo un esempio astratto.E @Fabien, Se metto 'abcd' in questo, devo prendere tutti gli analoghi, perché 'abcd' ha l'analogico come' a1', 'a1' ha l'analogico di' a3', 'a3' ha l'analogico come' a2' , quindi la funzione deve restituirmi tutti gli analoghi. – Smash