Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Łączenie powtarzających się wierszy
Forum PHP.pl > Forum > Przedszkole
rafik73
Witam
Z bazy mysql wyciągam w pętli dane i chciałbym, żeby powtarzające się wiersze automatycznie się łączyły, czyli
mam:

  1. ------------------------------------
  2. 01-03-2017 | dom | kowalski
  3. ------------------------------------
  4. 01-03-2017 | dom | nowak
  5. ------------------------------------
  6. 03-03-2017 | garaż | wiśniewski
  7. ------------------------------------
  8. 03-03-2017 | garaż | janicki
  9. ------------------------------------
  10. 03-03-2017 | garaż | wróblewski
  11. ------------------------------------
  12. 03-03-2017 | garaż | duda
  13. ------------------------------------


a chciałbym wyświetlić tak:

  1. ----------------------------
  2. | | kowalski
  3. ------------
  4. 01-03-2017| dom | nowak
  5. ------------------------------------
  6. | | wiśniewski
  7. -------------
  8. 03-03-2017 | garaż | janicki
  9. -------------
  10. | | wróblewski
  11. ------------
  12. | | duda
  13. ------------------------------------



goartur
Dobra a teraz oczekujesz pomocy w czym?
Mozesz zrobic array o nazwie "Lokacje" i do tych lokacji dodajesz najpierw wszystkie dostepne pozycje, a nastepnie uzywasz funkcji .push aby dodac element Kowalski do naprzyklad array Dom.
Po zrobieniu tego otrzymasz liste z 1 lokacja i wieloma nazwiskami.
Nastepnie loop.
Mateostin
Ale przecież można użyć funkcji MySQL 'GROUP BY' która też pogrupuje te wpisy a następnie obrobić w PHP, bo chyba MYSQL jest szybszy z tego co wiem.
rafik73
Napisałem , że chcę "wyświetlić". Chodzi mi o sugestie jak "rozciągnąć' pojedyncze komórki. Może tabela i rowspan? Myślałem, żeby wyświetlać w divach. Mam pewną koncepcję. Napiszę wieczorem.




To moje rozwiązanie, działa elegancko:

  1. $grafik_query = mysql_query("SELECT * FROM gp") or die('Błąd zapytania');
  2.  
  3. $i=0; // licznik wystąpień rekordu 'data' - wartość początkowa
  4.  
  5. while($grafik_data = mysql_fetch_array($grafik_query))
  6. {
  7. $data = $grafik_data['data'];
  8. $miejsce = $grafik_data['miejsce'];
  9.  
  10. $ilosc_data = mysql_result(mysql_query("SELECT COUNT(data) FROM gp WHERE data = '$data'"),0); //sprawdzenie liczby wystąpień rekordu 'data'
  11.  
  12. if($ilosc_data > 1) // jeśli wystąpień rekordu 'data' więcej niż 1
  13. {
  14. if($i==0)
  15. {
  16.  
  17. $height_data = 39 * $ilosc_data + $ilosc_data; //obliczenie wysokości rozciąganego div'a
  18.  
  19. echo '<div id="data" style="height:'.$height_data.'px;">
  20. '.$data_day_number.' '.$data_day_month.'<br>'.$data_day_name.'
  21. </div>';
  22. }
  23. }
  24.  
  25. if($ilosc_data == 1) // jeśli 1 wystąpienie rekordu 'data'
  26. {
  27. echo '<div id="data" style="height:39px;">
  28. '.$data.'
  29. </div>';
  30. }
  31.  
  32. echo '<div id="miejsce" style="height:39px;"> //rekord 'miejsce'
  33. '.$miejsce_town.'<br>'.$miejsce_place.'
  34. </div>';
  35.  
  36. $i++; //inkrementacja licznika
  37.  
  38. if($i == $ilosc_data ) // jeśli liczba wystąpień osiągnie istniejącą ilość
  39. {
  40. $i=0;
  41. }
  42.  
  43. }
  44.  
trueblue
Przebuduj zapytanie SELECT tak, aby mieć ilość rekordów grupie, do której przynależałby dany rekord jeśli zapytanie zawierałoby grupowanie.
Wygeneruj tabelę jak na przykładzie poniżej (zakładając, że są 3 rekordy w grupie).
  1. ....
  2. <tr>
  3. <td rowspan="3">01-03-2017</td>
  4. <td rowspan="3">dom</td>
  5. <td>Kowalski</td>
  6. </tr>
  7. <tr>
  8. <td>Nowak</td>
  9. </tr>
  10. <tr>
  11. <td>Iksiński</td>
  12. </tr>
  13. ....

Dla komórek z colspan ustaw vertical-align:middle w css.
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.