4

ここに投稿するのは初めてですが、ここの投稿を読んで多くの素晴らしいヒントやテクニックを得ることができました.

これが私の目的です:

比較する 2 つのやや類似したテーブルがあります。各テーブルの行ごとに、必要なフィールドを配列に取り込みます。

私は基本的に、他の配列に一致する値を持つ1つのテーブルから任意の配列の値をエコーアウトしたいと考えています。

これが私のコードです。おそらく理解しやすいでしょう。

$sql = "SELECT * FROM $i_comp ORDER BY `manufacturer`";
$statement = $objDb->query($sql);
$c_skus = $statement->fetchAll(PDO::FETCH_ASSOC);

$sql = "SELECT `sku_one`,`sku_two`,`qty`,`manufacturer`";
$sql .= "FROM $i_gas ORDER BY `manufacturer`";
$statement = $objDb->query($sql);
$d_skus = $statement->fetchAll(PDO::FETCH_ASSOC);

foreach ( $c_skus as $c_sku ) {
    // i want to see if any values of this array exist in the array created hy
    // the foreach loop below (yes, repeat for each row)
    $c = array($c_sku['sku'],$c_sku['sku_one'],$c_sku['sku_two'],$c_sku['sku_three']);
    foreach ( $d_skus as $d_sku ) {
        $d = array($d_sku['sku_one'],$d_sku['sku_two']);
        $intersect = array_intersect($c, $d);
        echo '<pre>', print_r($intersect), '</pre>';
    }
}

コードの反復ごとに受け取る結果は次のとおりです。

Array
(
)
1

また、キーには関心がなく、値だけに関心があることにも注意してください。最終的に、これらの値は INSERT ステートメントに組み込まれますが、当面は正しい結果を得る必要があります。

とにかく、すべての助けに感謝します!

4

1 に答える 1

1

これは通常SQLで行われます

別のテーブルに少なくとも1つの一致するSKUがある行全体が必要な場合:

$sql = "
SELECT c.* FROM $i_comp AS c 
  JOIN $i_gas AS d 
    ON d.sku_one in (c.sku, c.sku_one, c.sku_two, c.sku_three) 
    OR d.sku_two in (c.sku, c.sku_one, c.sku_two, c.sku_three) 
 ORDER BY c.`manufacturer`";
$statement = $objDb->query($sql);
$c_skus = $statement->fetchAll(PDO::FETCH_ASSOC);
// all rows that have at least 1 matching sku on another table
print_r($c_skus);

SKUのみが必要な場合

$sql = "
SELECT d.sku_one FROM $i_comp AS c 
  JOIN $i_gas AS d 
    ON d.sku_one in (c.sku, c.sku_one, c.sku_two, c.sku_three) 
UNION
SELECT d.sku_two FROM $i_comp AS c 
  JOIN $i_gas AS d 
    OR d.sku_two in (c.sku, c.sku_one, c.sku_two, c.sku_three) 
 ";
$statement = $objDb->query($sql);
$c_skus = $statement->fetchAll(PDO::FETCH_ASSOC);
// all skus that have at least 1 matching sku on another table
print_r($c_skus);

PHPの交差バリアントでは、配列を個別に作成してから、array_intersect

$c = array();
foreach ( $c_skus as $c_sku ) {
    $c[] = $c_sku['sku'];
    $c[] = $c_sku['sku_one'];
    $c[] = $c_sku['sku_two'];
    $c[] = $c_sku['sku_three'];
}
$d = array();
foreach ( $d_skus as $d_sku ) {
    $d[] = $d_sku['sku_one'];
    $d[] = $d_sku['sku_two'];
}

$intersect = array_intersect($c, $d);
echo '<pre>', print_r($intersect), '</pre>';
于 2012-10-13T00:32:25.137 に答える