#foreach
#foreach
Вопрос:
У меня есть таблица базы данных, в строке которой есть поле, которое может иметь то же значение. Это поле «идентификатор транзакции», в котором будет номер заказа. Строки могут иметь один и тот же номер заказа, но разные идентификаторы продукта для каждого заказанного товара.
Я отлично запрашиваю базу данных и также выводю данные. Однако я хочу разделить одинаковые идентификаторы транзакций и сделать что-то другое с этими данными. Я просто могу понять, как это сделать по какой-то причине.
пример:
ID txn_id product_id Product_name field5
-------- --------- ----------- --------- ---------
1 265 98 Product Name
2 265 99 Product Name
3 244 98 Product Name
Обновить
Итак, вот мой обновленный код, который все еще нуждается в помощи. Сейчас у меня два запроса. Один, который проверяет наличие дубликатов и помещает их в массив, затем другой, который перебирает таблицу базы данных с помощью оператора if, который проверяет совпадающие идентификационные номера транзакций.
Первый запрос:
$myquery = $wpdb->get_results("SELECT txn_id , COUNT(*) FROM test_table HAVING COUNT(*) > 1");
global $TXN;
foreach($myquery as $query){
$TXN= $query->txn_id;
}
Затем в основном запросе / цикле
global $wpdb;
$prepare_query = $wpdb->get_results("SELECT * FROM test_table" );
foreach($prepare_query as $data){
$txn_id = $data->txn_id;
$product_id = $data->product_id;
$product_name = $data->product_name;
?>
<table class="shop_table my_account_orders" width="100%">
<thead>
<tr>
<th align="left">Order #</th>
<th align="left">Product ID</th>
<th align="left">Product Name</th>
</tr>
</thead>
<tbody>
<tr class="order">
<td>
<?php echo "#" .$txn_id; ?>
<?php
if($txn_id === $TXN){
echo'YES';
}
?>
</td>
<td>
<?php echo $product_id; ?>
</td>
<td>
<?php echo $product_name; ?>
</td>
</tr>
</tbody>
</table>
<?php } ?>
Это выведет:
<table width="100%">
<thead>
<tr>
<th align="left">Order #</th>
<th align="left">Product ID</th>
<th align="left">Product Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>#265 YES</td>
<td>98</td>
<td>Product Name</td>
</tr>
</tbody>
</table>
<table width="100%">
<thead>
<tr>
<th align="left">Order #</th>
<th align="left">Product ID</th>
<th align="left">Product Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>#265 YES</td>
<td>99</td>
<td>Product Name</td>
</tr>
</tbody>
</table>
<table width="100%">
<thead>
<tr>
<th align="left">Order #</th>
<th align="left">Product ID</th>
<th align="left">Product Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>#244</td>
<td>98</td>
<td>Product Name</td>
</tr>
</tbody>
</table>
Когда я хочу получить:
<table width="100%">
<thead>
<tr>
<th align="left">Order #</th>
<th align="left">Product ID</th>
<th align="left">Product Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>#265 YES</td>
<td>98</td>
<td>Product Name</td>
</tr>
<tr>
<td>#265 YES</td>
<td>99</td>
<td>Product Name</td>
</tr>
</tbody>
</table>
<table width="100%">
<thead>
<tr>
<th align="left">Order #</th>
<th align="left">Product ID</th>
<th align="left">Product Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>#244</td>
<td>98</td>
<td>Product Name</td>
</tr>
</tbody>
</table>
Ответ №1:
Чтобы получить дублированные идентификаторы, вы могли бы использовать:
SELECT id,txn_id , COUNT(*)
FROM table_name
HAVING COUNT(*) > 1
Замените, конечно, имя_таблицы на имя вашей таблицы
Комментарии:
1. Итак, чтобы заставить это работать, я создал еще один запрос вне цикла заказов клиентов и превратил его в массив переменных, затем внутри цикла заказов я создал оператор and if, чтобы проверить, соответствует ли какой-либо из идентификаторов транзакции дубликатам в массиве. Чтобы проверить это, я вывожу «TRUE» рядом с каждым порядком, который является дубликатом, и это работает. Тем не менее, мне все равно нужно затем разделить эти данные и объединить идентификаторы продукта.
2. По сути, в этом основном цикле я хочу разделить два элемента, которые имеют одинаковый идентификатор транзакции, на отдельный вывод <tabel></table>, чем идентификаторы транзакций, которые не совпадают.
Ответ №2:
В итоге я сделал это так:
$myArray = $wpdb->get_results("SELECT * FROM " . $license_table);
$newArray=array();
foreach($myArray as $val){
$newKey=$val->txn_id;
$newArray[$newKey][]=$val;
}
print_r($newArray);
foreach ($newArray as $key => $array){
?>
<table border="0" cellpadding="0" cellspacing="0">
<tr class="header">
<td width="73%" valign="top">KEY</td>
<td width="73%" valign="top">Product Id</td>
<td width="27%" valign="top">Product Name</td>
</tr>
<?php
foreach($array as $values) {
?>
<tr class="details">
<td width="27%" valign="top"><?php echo $key; ?></td>
<td width="73%" valign="top"><?php echo $values->product_id; ?></td>
<td width="27%" valign="top"><?php echo $values->product_name ?></td>
</tr>
<?php } ?>
</table>
<?php
}