Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> niestandardowa tabela?, wyświetlanie selecta po kolumnach nie po wierszach
espera
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.03.2015

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Raito
post
Post #2





Grupa: Zarejestrowani
Postów: 156
Pomógł: 19
Dołączył: 27.04.2014

Ostrzeżenie: (0%)
-----


Nie twórz w pętli kolejnych tabeli (daj <table> i </table> poza pętlę).
Go to the top of the page
+Quote Post
espera
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.03.2015

Ostrzeżenie: (0%)
-----


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

Ten post edytował espera 27.03.2015, 14:39:59
Go to the top of the page
+Quote Post
zidek
post
Post #4





Grupa: Nieautoryzowani
Postów: 50
Pomógł: 2
Dołączył: 28.05.2013

Ostrzeżenie: (0%)
-----


Co tak właściwie chcesz osiągnąć? Rozrysuj tabelę i pokaż nam jak ma to wyglądać (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
espera
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.03.2015

Ostrzeżenie: (0%)
-----


Wyobrażam sobie to w taki sposób:
------------------------
Wersja | AR48 | DG64
------------------------
Napięcie | 5V | 12V
------------------------
Oświetl | LED | LED
------------------------
itd.

Ten post edytował espera 27.03.2015, 20:43:18
Go to the top of the page
+Quote Post
zidek
post
Post #6





Grupa: Nieautoryzowani
Postów: 50
Pomógł: 2
Dołączył: 28.05.2013

Ostrzeżenie: (0%)
-----


  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?

Ten post edytował zidek 27.03.2015, 20:56:34
Go to the top of the page
+Quote Post
espera
post
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.03.2015

Ostrzeżenie: (0%)
-----


Ł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...
Go to the top of the page
+Quote Post
ctom
post
Post #8





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował ctom 27.03.2015, 21:52:39
Go to the top of the page
+Quote Post
espera
post
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.03.2015

Ostrzeżenie: (0%)
-----


PHP Version 5.2.17 (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
ctom
post
Post #10





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


za chwilę kończy się wspieranie 5.4 a Ty wciąż męczysz 5.2 (IMG:style_emoticons/default/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>
';

Go to the top of the page
+Quote Post
b4rt3kk
post
Post #11





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
espera
post
Post #12





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.03.2015

Ostrzeżenie: (0%)
-----


Cytat(ctom @ 28.03.2015, 07:13:38 ) *
za chwilę kończy się wspieranie 5.4 a Ty wciąż męczysz 5.2 (IMG:style_emoticons/default/questionmark.gif)

Zainstalowałem wersję 5.4.26 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif) Dzięki ctom

Ten post edytował espera 30.03.2015, 12:23:44
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 01:21