我有一个嵌套产品类别表。我想从字段 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>";
}
}
我尝试了这个,但不起作用(
最佳答案
我会这样做
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 ,你最好切换到PDO或MySQLi并使用prepared statements .
关于php - 如何循环mysql_query直到结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15512731/