2013-03-19 52 views
0

我有一个嵌套的产品类别表。我想从custom_inserts_ru字段获取数据,如果数据为空 - 请返回顶部(父类别)并再次检查。如何在循环中执行mysql_query直到结果?

$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>"; 
    } 
} 

我试试这个,但不工作(

+1

代码的缩进不正确。为什么在“其他”部分的“endwhile”?它的目的是? – Jocelyn 2013-03-20 00:30:17

+0

找到结果时如何正确停止? – skywind 2013-03-20 00:31:51

回答

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

要使用它

$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_*扩展deprecated,你最好切换到PDOMySQLi和使用prepared statements

+0

工作很好!谢谢!但是它需要来自更高类别(顶级)的数据,我想在找到第一个结果(在子类别中)时停止它。 – skywind 2013-03-20 09:16:06

+0

不客气。如果你发布了一些样例数据和数据类型,并且为'custom_inserts_ru'字段设置了null约束条件,我们可以对其进行分类。 – peterm 2013-03-20 12:57:41

-1

你真的没有GOOGLE上搜索任何东西,这跟最基本的东西,总之:

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

+0

我正在更新我的代码,请看。 – skywind 2013-03-20 00:25:15