0

ネストされた製品カテゴリのテーブルがあります。フィールドからデータを取得したいのですがcustom_inserts_ru、空の場合はトップ(親カテゴリ)に移動してもう一度確認してください。

$mycat = 1146;
$result = mysql_query("SELECT categoryID, parent, custom_inserts_ru FROM SC_categories WHERE categoryID=$mycat");
while($row = mysql_fetch_row($result)) {
    if($row[2]==''){
        $mycat = $row[1];
    } else {
        echo "$row[1] <pre>$row[2]</pre>";
    }
}

私はこれを試しますが、動作しません(

4

2 に答える 2

2

私はこのようにします

function get_inserts ($db, $id) {
    $base_sql = "SELECT c.categoryID, 
           c.parent, 
           IFNULL(c.custom_inserts_ru, p.custom_inserts_ru) custom_inserts_ru, 
           p.parent parent_parent
      FROM SC_categories c LEFT JOIN
           SC_categories p ON c.parent = p.categoryID
     WHERE c.categoryID=";

    $inserts = "";
    do {
        $result = mysql_query ($base_sql . $id, $db);
        if (!$result) break;
        $row = mysql_fetch_assoc($result);
        $inserts = $row['custom_inserts_ru'];
        $id = $row['parent_parent'];

    } while (strlen($inserts) == 0 && $id);

    if($result) {
        mysql_free_result ($result);
    }
    return $inserts;
 } 

カテゴリの深いツリーに対する後続のクエリの数を減らすために、custom_inserts_ru現在のカテゴリまたはその直接の親から1回の選択で値をフェッチする自己結合が導入されています。

使用するには

$mycat = 1146;
$db = mysql_connect(...);
if (!$db) {
    die('Not connected : ' . mysql_error());
}
$db_selected = mysql_select_db('test', $db);
if (!$db_selected) {
    die ('Unable to select database : ' . mysql_error());
}

$inserts = get_inserts($db, $mycat);
echo "custom_inserts_ru for Id $currentID is '$inserts'";
mysql_close($db);

mysql_*拡張機能は非推奨であるため、 PDOまたはMySQLiに切り替えて、プリペアドステートメントを使用することをお勧めします。

于 2013-03-20T00:43:48.177 に答える
-1

あなたは本当に何もグーグルしていません、とにかく、それは最も基本的なことのようです:

while ($row = mysql_fetch_row($result)) {
//In a cycle
}

于 2013-03-19T23:58:38.437 に答える