2015-04-19 2 views
0

моя база данныхPHP группировка дубликатов - просто отображать один раз

стол: tree_hie

urutan_cluster | kd_barang 
31    | X | Y | Z | A 
32    | X | Y | Z | A 
33    | X | Y | Z | A | B 
33    | X | Y | Z | A | B | C | D 

стол: pergerakan

kd_barang | pnaik 
x   | 4 
y   | 3 
z   | 3 
a   | 3 
b   | 2 
c   | 1 
d   | 1 

таблица запросов

CREATE TABLE tree_hie 
    (`urutan_cluster` int, `kd_barang` varchar(9)) 
; 
INSERT INTO tree_hie 
    (`urutan_cluster`, `kd_barang`) 
VALUES 
    (31, ' X | Y | Z | A '), 
    (32, ' X | Y | Z | A '), 
    (33, ' X | Y | Z | A | B'), 
    (34, ' X | Y | Z | A | B | C | D') 
; 
CREATE TABLE value 
    (`id` varchar(1), `value` int) 
; 
INSERT INTO pergerakan 
    (`kd_barang`, `pnaik`) 
VALUES 
    ('x', 4), 
    ('y', 3), 
    ('z', 3), 
    ('a', 3), 
    ('b', 2), 
    ('c', 1), 
    ('d', 1) 
; 

я до сих пор код это ребята

<table border="1" cellpadding="3">                          
    <tr> 
     <th style="text-align:center;">A</th> 
     <th style="text-align:center;">B</th> 
    </tr> 
<tbody> 
<?php 

    $sqlp=mysql_query("SELECT * FROM tree_hie group by urutan_cluster"); 

    while ($data1=mysql_fetch_array($sqlp)){ 
     $clusters = $data1['urutan_cluster']; 
    echo '<tr>'; 
    echo '<td style="width:90px;text-align:center;">'.$clusters.'</td>'; 

    $sql2 = mysql_query("SELECT * FROM tree_hie where urutan_cluster = '$clusters'") or die(mysql_error()); 

      while ($data2 = mysql_fetch_array($sql2)) { 

       $urutan = $data2['urutan_cluster'];    
       $item_explode = explode('|', $item); 

       foreach($item_explode as $items) 
       { 
         $sql3 = mysql_query("SELECT * FROM pergerakan where kd_barang = '$items'") or die(mysql_error()); 

           while ($data3 = mysql_fetch_array($sql3)) { 

             $naik = $data3['pnaik']; 

             echo '<td style="width:90px;text-align:center;">'.$naik.'</td>'; 
           } 

       } 
} 

    echo '</tr>'; 
    } 
    ?> 
    </tbody> 
    </table> 

Ребят .. если у меня есть такой код, дисплей, как это ..

31 4 3 3 3 
32 4 3 3 3 
33 4 3 3 3 2 
34 4 3 3 3 2 1 1 

, но я хочу, группа, как это все дублирующиеся номер только один раз показать

31 4 3 
32 4 3 
33 4 3 2 
34 4 3 2 1 

я Не знаю, как это сделать .. вы можете знать парней? спасибо за помощь

+2

Если нормализовать базу данных, вам нужно только один запрос вместо вложенной запрашивает 3 уровня в глубину. – jeroen

+1

Зачем вам дважды запрашивать 'tree_hie'? Второй запрос возвращает те же данные, что и первый. – Barmar

+0

, потому что $ sql2 и $ sql3 связаны с @barmar – TARA

ответ

1

Turn $item_explode в список, который вы можете использовать с IN, а затем использовать DISTINCT, чтобы получить результаты, без дублей:

$in_list = implode(', ', array_map(function($x) { 
    return "'" . mysql_real_escape_string($x) . "'"; 
}, $item_explode)); 

$sql3 = mysql_query("SELECT DISTINCT pnaik FROM pergerakan WHERE kd_barang IN ($in_list)"); 
+0

жду .. этот код я положил после foreach {right ??? – TARA

+0

Вы избавляетесь от 'foreach ($ item_explode)', так как вы делаете один запрос для всех элементов, а не отдельный запрос для каждого из них. – Barmar

+0

эй @barmar .. большое спасибо за его работу .. я просто знаю о IN ... Спасибо огромное – TARA

Смежные вопросы