2015-03-04 3 views
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 

Порядка нет и имя клиента использует 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>'; 
} 

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

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

+0

использование выбрать отличный –

+1

Это не DBMS, что нужно сделать. Пусть слой выше позаботится о презентации. – jarlh

+0

Можете ли вы добавить свой PHP-код? – DesignerGuy

ответ

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>'; 
} 

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

+0

спасибо! это на самом деле то, что я ищу, отличная помощь – natsu1627

1

Как сказал jarlh, его не DBMS вещь тоже делать, редактировать запрос с заказом по заказу не ниже и используйте код для 2 иллюстрации

$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

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

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 
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))