Удалить дубликат строки из выходной таблицы

0

Я хочу удалить дубликат вывода в моей таблице, таблица выглядит так:

Order No  Customer Name  Order
1001       John          Milk
1001       John          Egg
1002       Mark          Milk
1002       Mark          Bread

Я хочу, чтобы это было так

Order No  Customer Name  Order
1001       John          Milk
                         Egg
1002       Mark          Milk
                         Bread

В заказе no и имени клиента используется rowspan = 2

Клиент и заказ поступают из разных таблиц в моей базе данных

Запрос этой таблицы поступает из внутреннего запроса на соединение, соединяющего два

$query = mysql_query("select customer.customerName, order.orderNo, order.item 
from customer inner join orderInfo on orderInfo.customerId = customer.customerId");

while($order = mysql_fetch_assoc($query))
{
 echo '<tr>
  <td>'.$order['orderNo'].'</td>
  <td>'.$order['customerName'].'</td>
  <td>'.$order['item'].'</td>
 </tr>';
}

и выход вышеприведенного кода является 1-й иллюстрацией

Как мне достичь 2-й иллюстрации, что-то не так с моими отношениями в таблице или я должен использовать правильный запрос?

  • 0
    использовать выберите разные
  • 1
    Это не то, что нужно делать в dbms. Пусть слой выше позаботится о презентации.
Показать ещё 3 комментария
Теги:
html-table
inner-join

4 ответа

0
Лучший ответ

Возможно, вам лучше использовать group_concat:

$query = mysql_query("
SELECT 
    customer.customerId, customer.customerName, order.orderNo, group_concat(order.item SEPARATOR ',') as order_items
FROM 
    customer
INNER JOIN
    orderInfo on orderInfo.customerId = customer.customerId
GROUP BY customer.customerId
");

И в вашем коде просто замените разделитель:

while($order = mysql_fetch_assoc($query))
{
 echo '<tr>
  <td>'.$order['orderNo'].'</td>
  <td>'.$order['customerName'].'</td>
  <td>'.str_replace(',','<br/>',$order['item']).'</td>
 </tr>';
}

В этом случае вам не понадобится rowpan = 2.

  • 0
    Спасибо! это на самом деле то, что я ищу, большая помощь
1

Как сказал jarlh, это тоже не дебют, отредактируйте запрос с порядком по порядку no и используйте приведенный ниже код для вашей второй иллюстрации

$previous=-1000;
while ($row = mysql_fetch_assoc($query)
{
if($previous!=$row['orderNo'])
{
echo "<tr><td>".$row['orderNo']."</td>";
echo "<td>".$row['customerName']."</td>";
echo "<td>".$row['item']."</td>";
}
else
{
echo "<tr><td></td><td></td><td>".$row['item']."</td>";
}
$previous=$row['orderNo'];
}
0

проверьте этот запрос:

Select Dep, Case
             When rn = 1 And c_d > 1 Then
              d
             When c_d = 1 Then
              d
             Else
              Null
           End D1,
           Case
             When rn = 1 And c_k > 1 Then
              k
             When c_k = 1 Then
              k
             Else
              Null
           End K1,
           Case
             When rn = 1 And c_m > 1 Then
              m
             When c_m = 1 Then
              m
             Else
              Null
           End M1
      From (Select Count(1) Over(Partition By d,dep Order By d) c_d,
                   Count(1) Over(Partition By k,dep Order By k) c_k,
                   Count(1) Over(Partition By m,dep Order By m) c_m,
                   row_number() Over(Partition By dep Order By dep)rn,
                   d,
                   k,
                   m,
                   Dep
              From (Select 'ali' d, '1000' k, 'M' m, 'x' Dep
                      From Dual
                    Union
                    Select 'ali' d, '1000' k, 'H' m, 'x' Dep
                      From Dual
                    Union
                    Select 'ali' d, '1001' k, 'M' m, 'y' Dep
                      From Dual
                    Union
                    Select 'ali' d, '1000' k, 'H' m, 'y' Dep
                      From Dual))
0

Если ваши данные не являются динамическими, вы можете использовать следующее:

DECLARE @varTable TABLE (OrderNo NVARCHAR(10), CustomerName NVARCHAR(60), Order NVARCHAR(60))

INSERT INTO @varTable VALUES( CAST(1001 AS NVARCHAR(10)),   'John', 'Milk')
INSERT INTO @varTable VALUES( '',                           '',     'Egg')
INSERT INTO @varTable VALUES( CAST(1002 AS NVARCHAR(10)),   'Mark', 'Milk')
INSERT INTO @varTable VALUES( '',                           '',     'Bread')

SELECT * FROM @varTable

Ещё вопросы

Сообщество Overcoder
Наверх
Меню