Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: specyficzne wyświetlanie wierszy z mysql
Forum PHP.pl > Forum > PHP
PaKoS
Witam,
przejdę od razu do pytania:
(na php się w miarę znam ale tego jeszcze nie robiłem)

Mam tabele o nazwie powiedzmy tabela i ma ona wiele kolumn i wierszy z danymi ale chcę wyświetlić konkretnie weirsze z kolumny NAME.
(do moderatora: czytać dalej a nie przenosić winksmiley.jpg )
Mam kod:

  1. <?php
  2. //łacze sie z baza i wybieram a potem
  3. $query = 'SELECT name FROM tabela WHERE nazwa = php';
  4. $result = mysql_query($query, $sqlconnect);
  5. echo '<table>';
  6. while($row = mysql_fetch_row($result)){
  7. echo '<tr><td>$row[0]</td></tr>';
  8. }
  9. echo '</table>';
  10. ?>


i teraz wyswietla mi to w ten sposob:

<tr><td>wartosc 1</td></tr>
<tr><td>wartosc 2</td></tr>
<tr><td>wartosc 3</td></tr>
...

a ja chce to wyswietlic tak:

<tr><td>wartosc 1</td><td>wartosc 2</td></tr>
<tr><td>wartosc 3</td><td>wartosc 4</td></tr>
<tr><td>wartosc 5</td><td>wartosc 6</td></tr>
...

jak to zrobić? :roll2:
ave
  1. <?php
  2. $a=0;
  3. while($row = mysql_fetch_row($result))
  4. {
  5. echo (($a % 2==0) ? '<tr>' : '').'<td>'.$row[0].'</td>'.(($a++ % 2==0) ? '</tr>' : '');
  6. }
  7. ?>


dajesz jaka zmienna ktora powiekszacz co przejscie petli o 1, i sprawdzacz czy reszta z z dzielenia przez 2 jest rowna 0 jesli tak to dajesz <tr> i </tr>
PaKoS
hmm ok doszedłem już do tego (ale mimo to - dzięki ~ave)
ale mam inny problem:
1. oto mój kod
  1. <?php
  2.  
  3. $php_query = 'SELECT * FROM ws_sub_categories WHERE in_cat = "php" ORDER BY name';
  4. $php_result = mysql_query($php_query, $sqlconnect);
  5. opentable("Skrypty :: php");//moja funkcja, niewazne
  6. echo '<table cellpadding="0" cellspacing="0" border="0" width="100%">';
  7. echo '<tr><td colspan="2">&nbsp;</td></tr>';
  8. $i = 0;
  9.   while ($php_row = mysql_fetch_assoc($php_result)) {
  10.    if ($i == 2)
  11.     {
  12.        echo "</tr>";
  13.        $i = 0;
  14.     }
  15.      if ($i == 0)
  16.         echo "<tr>";
  17.     $i++;
  18.     echo "<td>".$php_row[name]."</td>";
  19.   }
  20. if ($i != 0)
  21.   echo "</tr>";
  22.  
  23. echo '<tr><td  colspan="2">&nbsp;</td></tr>';
  24. echo '</table>';
  25. closetable();//moja funkcja, niewazne
  26.  
  27. ?>


2. oto moje pytanie:
tablele są układane w taki sposób:
(np. w kolumnie name mamy wiersze: Cccc, Dddd, Aaaa, Bbbb)

z poleceniem ORDER BY name sortuje owszem alfabetycznie ALE układa to tak:

<tr><td>Aaaa</td><td>Bbbb</td></tr>
<tr><td>Cccc</td><td>Dddd</td></tr>

a mi chodzi o to żeby ułożył to tak:

<tr><td>Aaaa</td><td>Cccc</td></tr>
<tr><td>Bbbb</td><td>Dddd</td></tr>

(chodzi o ułożenie alfabetyczne ale nie wierszami tylko kolumnami)
ave
sqlowym pytaniem raczej takiego czegos nie zrobisz,
pewnie zostaje przy wyciaganiu wrzucac do 2 roznych tabel
  1. <?php
  2.  
  3. $a=0;
  4. while ($php_row = mysql_fetch_assoc($php_result)) {
  5.  if($a % 2==0) $tablica_a[]=$php_row[name];
  6. else $tablica_b[]=$php_row[name];
  7. }
  8. ?>


a potem to wyrzucac
  1. <?php
  2.  
  3. foreach($tablica_a as $aa)
  4. {
  5. echo $tablca_a[$aa].' / '.$tablca_b[$aa];
  6.  
  7. }
  8. ?>
PaKoS
hmmm dosyć skomplikowany sposób
oczywiście zawsze można go zastosować ale myślałem że istnieje prostsze rozwiązanie snitch.gif
dzięki za podpowiedzi
Ludvik
Jeżeli pobierzesz posortowane już dane, możesz podzielić otrzymaną tablicę na dwie mniejsze (lewa i prawa strona). Jeżeli masz parzystą liczbę elementów, to dzielisz w stosunku 1:1, jeżeli nie, to dzielisz tak, aby po lewej stronie znalazł się o 1 element więcej niż po prawej. Potem korzystając ze znajomości liczby wierszy z lewej strony możesz przejść przez obie tablice pętlą for, wyświetlając je mniej więcej tak:
  1. <?php
  2. echo '<tr><td>' . $lewa[$i] . '</td><td>' . isset($prawa[$i]) ? $prawa[$i] : '' . </td></tr>';
  3. ?>

Sprawdzanie prawej wartości można pominąć, jeżeli lewa strona będzie zawsze równoliczna z prawą.
PaKoS
hmm no tak
ale jak to podzielić na dwie mniejsze tablice tak żeby nie wyszło mi coś takiego:
(to inne wartości ale podzielił każdą kolumnę od a do z)

<tr><td>Aaaa</td><td>Dddd</td></tr>
<tr><td>Bbbb</td><td>Oooo</td></tr>
<tr><td>Xxxx</td><td>Zzzz</td></tr>

jakieś propozycje?
nospor
podzial na tablice dostales od ~ave, aczkolwiek zapomnial on o jednej bardzo waznej sprawie smile.gif: $a++

  1. <?php
  2. $a=0;
  3. while ($php_row = mysql_fetch_assoc($php_result)) {
  4.  if($a % 2==0) $tablica_a[]=$php_row['name'];
  5. else $tablica_b[]=$php_row['name'];
  6. $a++;
  7. }
  8.  
  9. ?>
NIe stosuj natomiast jego kodu do wyswietlania, bo "troche" mu nie wyszedl. Do wyswietlania nadaje sie kod ~Ludvik'a
PaKoS
no nie powiedziałbym że to wszystko po złożeniu działa
chyba że coś robię źle
konkretnie mam problemy z wyświetleniem po skorzystaniu z kodu ~Ludvik-a
nospor
Cytat
że to wszystko po złożeniu działa
oj, zalezy co rozumiesz przez "po zlozeniu". ja mowilem o inteligentnym zlozeniu winksmiley.jpg zauważ ze w kodzie ~ave tablica nazywa sie: $tablica_a, $tablica_b
a w drugim kodzie jest to $lewa i $prawa. Mam nadzieje ze wzioles to pod uwage. ale najlepiej bys zrobil, jakbys podal kod po zlozeniu. Na przyszlosc jak piszesz ze cos nie dziala, to pamietaj o podaniu kodu
PaKoS
*nospor, wiem że musiałeś przywyknąć do głupków ale bez przesady blink.gif

przy takim kodzie
  1. <?php
  2. $a = 0;
  3. while($php_row = mysql_fetch_assoc($php_result)){
  4. if($a % 2 == 0){$tablica_a[$a] = $php_row['name'];}
  5. else{$tablica_b[$a] = $php_row['name'];}
  6. $a++;
  7. }
  8. for($i=0; $i < $php_num_rows; $i++){
  9. echo '<tr><td>'.$tablica_a[$i].'</td><td>'.$tablica_b[$i].'</td></tr>';
  10. }
  11. ?>


wyświetla tabele w taki sposób:


(nie liczmy pierwszej <tr> i ostatniej - sam je dodałem poza tym kodem)

czyli tak "schodkowo":
<tr><td>WARTOSC 1</td><td></td></tr>
<tr><td></td><td>WARTOSC 3</td></tr>
<tr><td>WARTOSC 2</td><td></td></tr>

...
nospor
Cytat
*nospor, wiem że musiałeś przywyknąć do głupków ale bez przesady
Ja ci tylko mowilem o jakim ja zlozeniu mowilem. NIe podajac kodu moglem jedynie gdybac i miec nadzieje ze zrobiles go poprawnie. Ale jednak widze ze sie mylilem.
$tablica_a[$a] czy widziales gdzie w kodzie aby tak bylo? nie, bylo o tak:$tablica_a[]. to jest zasadanicza roznica. Jesli nie wiesz co to oznacza to proponuje manuala by sie dowiedziec smile.gif

$php_num_rows - co to za zmienna? ona zawiere liczby wszystkich rekordów? źle. ona ma zawierac liczbe elemntów w pierwszej tabeli.

ps: i nie mowilem ze jestes glupi. A na forum nie przywykam do glupków bo ich nie ma. sa za to ludzie co zamiast zrobic to co mam w podpisie, to pisza bez namyslu a potem kwiatki wychodzą smile.gif
PaKoS
  1. <?php
  2. $php_query = 'SELECT * FROM ws_sub_categories WHERE in_cat = "php" ORDER BY name';
  3. $php_result = mysql_query($php_query, $sqlconnect);
  4. $php_num_rows = mysql_num_rows($php_result);
  5. opentable("Skrypty :: php");
  6. echo '<table cellpadding="0" cellspacing="0" border="1" width="100%">';
  7. echo '<tr><td colspan="2">&nbsp;</td></tr>';
  8.  
  9. $a = 0;
  10. while($php_row = mysql_fetch_assoc($php_result)){
  11. if($a % 2 == 0){$tablica_a[] = $php_row['name'];}
  12. else{$tablica_b[] = $php_row['name'];}
  13. $a++;
  14. }
  15.  
  16. for($i=0; $i < count($tablica_a); $i++){
  17. echo '<tr><td>'.$tablica_a[$i].'</td><td>'.$tablica_b[$i].'</td></tr>';
  18. }
  19. ?>


wyśwetla ok, ale nie działa już kiedy mamy nieparzystą liczbę rekordów,
czyli nie działa to co podał ~Ludvik, więc jak robie tak:
  1. <?php
  2.  
  3. for($i=0; $i < $php_num_rows; $i++){
  4. echo '<tr><td>'.$tablica_a[$i].'</td><td>'.isset($tablica_b[$i]) ? $tablica_b[$i] : ''.'</td></tr>';
  5. }
  6.  
  7. ?>
nospor
  1. <?php
  2. for($i=0; $i < $php_num_rows; $i++){
  3. echo '<tr><td>'.$tablica_a[$i].'</td><td>'.isset($tablica_b[$i]) ? $tablica_b[$i] : ''.'</td></tr>';
  4. }
  5. ?>
Juz ci mowilem, ze nie moze tam byc $php_num_rows.

  1. <?php
  2. $ilosc = count($tablica_a);
  3. for($i=0; $i < $ilosc; $i++){
  4. echo '<tr><td>'.$tablica_a[$i].'</td><td>'.(isset($tablica_b[$i]) ? $tablica_b[$i] : '').'</td></tr>';
  5. }
  6. ?>
PaKoS
ahh sorry nie wiem skąd tam sie wzielo to na wpisie w forum bo w kodzie mialem ok, ale to nadal nie dziala, zebyc byla jasnosc podaje caly kod, taki jaki jest teraz:
  1. <?php
  2.  
  3. $php_query = 'SELECT * FROM ws_sub_categories WHERE in_cat = "php" ORDER BY name';
  4. $php_result = mysql_query($php_query, $sqlconnect);
  5. $php_num_rows = mysql_num_rows($php_result);
  6. opentable("Skrypty :: php");
  7. echo '<table cellpadding="0" cellspacing="0" border="1" width="100%">';
  8. echo '<tr><td colspan="2">&nbsp;</td></tr>';
  9.  
  10. $a = 0;
  11. while($php_row = mysql_fetch_assoc($php_result)){
  12. if($a % 2 == 0){$tablica_a[] = $php_row['name'];}
  13. else{$tablica_b[] = $php_row['name'];}
  14. $a++;
  15. }
  16.  
  17. for($i=0; $i < count($tablica_a); $i++){
  18. echo '<tr><td>'.$tablica_a[$i].'</td><td>'.(isset($tablica_b[$i]) ? $tablica_b[$i] : '').'</td></tr>';
  19. }
  20.  
  21. echo '<tr><td colspan="2">&nbsp;</td></tr>';
  22. echo '</table>';
  23. closetable();
  24.  
  25. ?>


i on daje cos takiego:
nospor
no to teraz ja dalem ciala smile.gif nie wiem czemu ubzduralo mi sie ze kod ~ave jest ok blink.gif Kod do dzielenia jest zly. poprawka:
  1. <?php
  2. $a = 0;
  3. $half = round($php_num_rows / 2);
  4. while($php_row = mysql_fetch_assoc($php_result)){
  5. if($a < $half){$tablica_a[] = $php_row['name'];}
  6. else{$tablica_b[] = $php_row['name'];}
  7. $a++;
  8. }
  9.  
  10. ?>
PaKoS
teraz wszystko działa super .. ale będzie serwis aaevil.gif
dzięki wielkie za pomoc ~nospor
matrach
Ja bym proponował bardziej dynamiczne rozwiązanie.
W moim skrypcie jest zmienna ilośc kolumn.
Oto on:
  1. <?php
  2. while($php_row = mysql_fetch_assoc($php_result)){
  3. $tabela[] = $php_row['name'];
  4. }
  5. // ilość kolumn
  6. $kolumny = 2;
  7. //ilość wierszy na kolumne
  8. $per = ceil(count($tabela) / $kolumny);
  9. $tabela = array_chunk($tabela, $per);
  10. echo '<table>';
  11. //wiersz
  12. for($i=0;$i<$per;$i++)
  13. {
  14.  echo '<tr>';
  15.  //kolumna
  16.  for($j = 0; $j < $kolumny; $j++)
  17. echo '<td>'.$tabela[$j][$i].'</td>';
  18.  
  19.  echo '</tr>';
  20. }
  21. echo '</table>';
  22. ?>

$kolumny odpowiadają za ilość kolumn.
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.