Вложенные запросы с использованием wpdb

Я пытаюсь отобразить несколько строк данных для каждого <h3><?php echo $name; ?></h3> элемент, который появляется в цикле.

С текущим кодом он показывает только одну строку для каждого элемента <h3><?php echo $name; ?></h3>

У меня есть это в моем файле functions.php $newdb = new wpdb('login', 'pass', 'db', 'host');

<?php $result=$newdb->get_results('select tbl1.name, tbl2.col1, tbl2.col2, tbl2.col3 from tbl1, tbl2 where tbl1.name=tbl2.tbl1_name');
$names=array();
foreach($result as $row): ?>
<?php $names[$row->name][]=$row;
endforeach; ?>
<?php foreach($names as $name=>$info): ?>

    <h3><?php echo $name; ?></h3>
    <table>
       <tr><th>col1</th><th>col2</th><th>col3</th></tr>
        <?php foreach($info as $n):?>       
        <tr>
            <td><?php echo $n->col1; ?></td>
            <td><?php echo $n->col2; ?></td>
            <td><?php echo $n->col3; ?></td>    
        </tr>
        <?php endforeach; ?>
    </table>    
<?php endforeach; ?>

Таким образом, цикл отображает заголовок, за которым следуют несколько строк записей, а не одна.

<h2>Name</h2>
<table>
<tr><th>col1</th><th>col2</th><th>col3</th></tr>
        col1-value1  col2-value1  col3-value1
        col1-value2  col1-value2  col1-value2
        etc.
</table>

<h2>Name</h2>
<table>
<tr><th>col1</th><th>col2</th><th>col3</th></tr>
        col1-value1  col2-value1  col3-value1
        col1-value2  col1-value2  col1-value2
        etc.
</table>

<h2>Name</h2>
<table>
<tr><th>col1</th><th>col2</th><th>col3</th></tr>
        col1-value1  col2-value1  col3-value1
        col1-value2  col2-value2  col3-value2
        etc.
</table>
.....`

1 ответ

Решение

Вы можете использовать вашу идею, но вы можете сделать это с помощью одного запроса, как

global $wpdb;
$result=$wpdb->get_results('select a.col, b.col1, b.col2, b.col3 from a,b where a.col=b.col5');

Предположим, что у вас есть tbl1 стол и имеет name поле и tbl2 таблица и имеет поле, например, tbl1_name который имеет значение имени tbl1 Поле имени и другие поля (без дубликатов), так что вы можете объединить обе таблицы, как

$result=$wpdb->get_results('select tbl1.name, tbl2.col1, tbl2.col2, tbl2.col3 from tbl1, tbl2 where tbl1.name=tbl2.tbl1_name');
$names=array();
foreach($result as $row): ?>
    $names[$row->name][]=$row;
<?php endforeach; ?>
foreach($names as $name=>$info):
    echo $name;
    ?><table><?php
    foreach($info as $n):
    ?>
            <tr>
                <td><?php echo $n->col1; ?></td>
                <td><?php echo $n->col2; ?></td>
                <td><?php echo $n->col3; ?></td>
            </tr>
    <?php
    <?php endforeach; ?>
    ?></table><?php
<?php endforeach; ?>

Также помните $wpdb является глобальным объектом и доступен через файлы шаблонов, поэтому вам не нужно использовать new чтобы сделать инстанс, просто используйте global Ключевое слово, как я написал в своем ответе.

Ссылка на класс / wpdb и sql join и этот.

Другие вопросы по тегам