Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: niestandardowa tabela?
Forum PHP.pl > Forum > Bazy danych > MySQL
espera
Witam wszystkich,
Mam tabelę WERSJA. Posiada ona wiersze id, name, itd.
Wyciągam z niej dane przy pomocą funkcji drukuj z parametrami określającymi, jakie wersje dany produkt posiada:
  1. function drukuj ($wersja1, $wersja2, $wersja3)

Mogę whilem wydrukować każdą wersję jedna pod drugą:
  1. $result=mysql_query("SELECT * from wersja where name='".$wersja1."' or name='".$wersja2."' or name='".$wersja3."'");
  2. while($rotary=mysql_fetch_array($result)){
  3. echo '<table class="w1"><tr class="alt"><th>';
  4. echo 'Wersja</th><td>';
  5. echo $rotary['name'];
  6. echo '</td></tr><tr><th>Napięcie znamionowe</th><td>';
  7. echo $rotary['napiecie_znamionowe'];
  8. echo '</td></tr>
  9. ...
  10. echo '</table>';
  11. }
  12. mysql_free_result($result);
  13.  

Ale to będą dwie tabele jedna pod drugą. Co mogę zrobić, aby tabela była jedna? A wersje ze sobą zestawione w poziomie?
Dzięki za pomoc smile.gif


Raito
Nie twórz w pętli kolejnych tabeli (daj <table> i </table> poza pętlę).
espera
Ale za każdym razem wydrukuje mi np. "Wersja". Tego chciałbym uniknąć... <tr>Tworzy kolejne wiersze, nie kolumny. Można to ominąć i w CSS dać floata="left" i umieść tabelę obok tabeli.
Zastanawiam się nad UNION...
zidek
Co tak właściwie chcesz osiągnąć? Rozrysuj tabelę i pokaż nam jak ma to wyglądać smile.gif
espera
Wyobrażam sobie to w taki sposób:
------------------------
Wersja | AR48 | DG64
------------------------
Napięcie | 5V | 12V
------------------------
Oświetl | LED | LED
------------------------
itd.
zidek
  1. $result=mysql_query("SELECT name, napiecie_znamionowe from wersja where name IN ('{$wersja1}', '{$wersja2}', '{$wersja3}')");
  2. echo '<table class="w1">';
  3. echo "<tr class='alt'><th>Wersja</th><td>{$rotary['name']}</td></tr>";
  4. while($rotary=mysql_fetch_array($result)){
  5. echo "<tr><th>Napięcie znamionowe</th><td>{$rotary['napiecie_znamionowe']}</td></tr>";
  6. }
  7. echo '</table>';


Prawie taki sam efekt osiągniesz w ten sposób. Nie wiem tylko skąd chcesz pobrać "Oświetl" - jest to zapisane w bazie?
espera
Ładnie, ale wynik miałem taki sam wcześniej.
W tej chwili mamy takie coś:
--------------------------
Wersja | -
--------------------------
Napiecie | 5V
--------------------------
Oświetlenie | LED
--------------------------
Napiecie | 12V
--------------------------
Oświetlenie | LED
--------------------------
Napiecie | 9V
--------------------------
Oświetlenie | LED

Cytat(zidek @ 27.03.2015, 20:54:31 ) *
Nie wiem tylko skąd chcesz pobrać "Oświetl" - jest to zapisane w bazie?


W bazie mam więcej danych, nie wrzucam wszystkiego, bo zrobiło się nie czytlene...
ctom
to powinno Ci rozwiązać problem ... tylko dopasuj sobie wygląd tabeli

Kod
$result=mysql_query("SELECT name, napiecie_znamionowe from wersja where name IN ('{$wersja1}', '{$wersja2}', '{$wersja3}')");

$data = [];
while($row=mysql_fetch_array($result)){
    $data[] = [ 'name'=> $row['name'] , 'v' => $row['napiecie_znamionowe'], 'l' => $row['oswietlenie'] ];
}

echo '
<table>
<tr><td>Wersja</td><td>'.( implode('</td><td>', array_column($data,'name')) ).'</td></tr>    
<tr><td>Napiecie</td><td>'.( implode('</td><td>', array_column($data,'v')) ).'</td></tr>    
<tr><td>Oświetlenie</td><td>'.( implode('</td><td>', array_column($data,'l')) ).'</td></tr>    
</table>
';


a minimum to PHP 5.5
espera
PHP Version 5.2.17 sad.gif
ctom
za chwilę kończy się wspieranie 5.4 a Ty wciąż męczysz 5.2 questionmark.gif

Kod
/* uproszczona wersja tej funkcji */
if (!function_exists('array_column'))
{
    function array_column($arr, $val)
    {
        $results = array();
        foreach( (array)$arr as $row ) {
            if( array_key_exists($val, (array)$row) ) {
                $results[] = $row[ $val ];      
            }
        }
        return $results;
    }
}



$result=mysql_query("SELECT name, napiecie_znamionowe from wersja where name IN ('{$wersja1}', '{$wersja2}', '{$wersja3}')");

$data = array();
while($rotary=mysql_fetch_array($result)){
    $data[] = array( 'name'=> $row['name'] , 'v' => $row['napiecie_znamionowe'], 'l' => $row['oswietlenie'] );
}


echo '
<table>
<tr><td>Wersja</td><td>'.( implode('</td><td>', array_column($data,'name')) ).'</td></tr>    
<tr><td>Napiecie</td><td>'.( implode('</td><td>', array_column($data,'v')) ).'</td></tr>    
<tr><td>Oświetlenie</td><td>'.( implode('</td><td>', array_column($data,'l')) ).'</td></tr>    
</table>
';

b4rt3kk
Może byś tak użył funkcji agregującej w zapytaniu (o ile dobrze zrozumiałem Twój problem)? Tj.

  1. SELECT name, GROUP_CONCAT(napiecie_znamionowe SEPARATOR ', ') AS napiecie_znamionowe FROM wersja WHERE [tutaj przepisz swoje warunki] GROUP BY name;


Wtedy nie będziesz musiał męczyć się z tymi tabelkami.
espera
Cytat(ctom @ 28.03.2015, 07:13:38 ) *
za chwilę kończy się wspieranie 5.4 a Ty wciąż męczysz 5.2 questionmark.gif

Zainstalowałem wersję 5.4.26 smile.gif
Musiałem trochę dostosować do 5.4:
Kod
    if (!function_exists('array_column')){
        function array_column($arr, $val)
        {
            $results = [];
            foreach($arr as $row) {
                if( array_key_exists($val, (array)$row) ) {
                    $results[] = $row[$val];
                }
            }
            return $results;    
        }
    }

    $data = [];
    while($rotary=mysql_fetch_array($result)){
        $data[] = ['name'=> $rotary['name'] ,
            'napiecie_znamionowe' => $rotary['napiecie_znamionowe'],
            'maksymalny_pobor_pradu' => $rotary['maksymalny_pobor_pradu'],
        ];
    }    
echo '
    <table>
    <tr class="alt"><th>Wersja</th><td>'.( implode('</td><td>', array_column($data,'name')) ).'</td></tr>    
    <tr><th>Napięcie znamionowe</th><td>'.( implode('</td><td>', array_column($data,'napiecie_znamionowe')) ).'</td></tr>    
    <tr class="alt"><th>Maksymalny pobór prądu (bez obciążenia)</th><td>'.( implode('</td><td>', array_column($data,'maksymalny_pobor_pradu')) ).'</td></tr>
    </table>
    ';
    mysql_free_result($result);



Pomogło smile.gif Dzięki ctom
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.