繁体   English   中英

Wordpress 站点 SQL 查询获取<optgroup>设置为不同的值

[英]Wordpress site SQL query to get <optgroup> set to distinct value

示例表数据

id  manufacturer  yeast_name  yeast_id  archived
01  Bootleg       American    BL001     yes
02  Imperial      American    IMP001    yes
03  Imperial      German      IMP002    yes
04  White Labs    Chico       WLP001    yes
05  White Labs    London Ale  WLP488    yes
06  White Labs    Lager       WLP893    no
07  Wyeast        American    WY1056    yes

我正在尝试使用代码片段在我的 Wordpress 站点上输出不同的<optgroup> 我可以使用以下代码在非 wordpress 网站上执行此操作:

工作代码

$sql = 'SELECT DISTINCT * FROM table_name WHERE archived = "yes" ORDER BY yeast_id ASC';
$result = mysqli_query($conn, $sql);
echo '<select class="req" id="strain" name="strain" size="1" style="width:40%;">';
echo '<option value="#">Choose Yeast Strain...</option>';
while($row = mysqli_fetch_assoc($result)){
    $array[$row['manufacturer']][] = $row;
}

foreach($array as $key=>$value){
    if(is_array($value)){
        echo "<optgroup label='".$key."'>";
        foreach($value as $k=>$v){
            echo "<option value='".$v['yeast_id']."-".$v['yeast_name']."'>".$v['yeast_id']." ".$v['yeast_name']."</option>";
        }
    echo "</optgroup>";
    }
}
echo '</select>';

我在使用 Wordpress 的 $wpdb->get_results 时遇到了问题,但我失败了。 我使用“ARRAY_A”将结果放入一个数组中。 我被困在如何做代码的“while”部分。 任何帮助都会非常出色。

非工作代码

global $wpdb;
$results = $wpdb->get_results("SELECT DISTINCT * FROM wpog_user_yeast WHERE archived = 'yes' ORDER BY yeast_id ASC", ARRAY_A);

echo '<select class="req" id="strain" name="strain" size="1" style="width:40%;">';
echo '<option value="#">Choose Yeast Strain...</option>';
while($row = $wpdb->get_results($results)){
  $array[$row[$results->manufacturer]][] =$row;
}
foreach($array as $key=>$value){
    if(is_array($value)){
        echo "<optgroup label='".$key."'>";
        echo "</optgroup>";
    }
}

echo '</select>';

$result 已经是一个数组,所以$wpdb->get_results($results)应该给你一个错误使用

foreach($results as $row){
 $array[$row[$results->manufacturer]][] =$row;
} 

此外,您应该保留$table = $wpdb->prefix ."user_yeast"以防您也想在另一个 wopress 站点上使用该代码

谢谢@nbk。 你的解决方案让我成功了 95%! 一个小小的调整让我完成了剩下的工作。

$array[$row['manufacturer']][] =$row; 代替您的代码工作。

global $wpdb;
$results = $wpdb->get_results("SELECT DISTINCT * FROM wpog_user_yeast WHERE archived = 'yes' ORDER BY yeast_id ASC", ARRAY_A);
echo '<select class="req" id="strain" name="strain" size="1" style="width:40%;">';
echo '<option value="#">Choose Yeast Strain...</option>';
foreach($results as $row){
  $array[$row['manufacturer']][] =$row;
}
foreach($array as $key=>$value){
    if(is_array($value)){
        echo "<optgroup label='".$key."'>";
        foreach($value as $k=>$v){
            echo "<option value='".$v['yeast_id']."-".$v['yeast_name']."'>".$v['yeast_id']." ".$v['yeast_name']."</option>";
        }
    echo "</optgroup>";
    }
}
echo '</select>';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM