Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP]Łączenie powtarzających się wierszy
rafik73
post
Post #1





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 19.03.2014

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


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



Go to the top of the page
+Quote Post
goartur
post
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


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





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 23.03.2016

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


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





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 19.03.2014

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


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





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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.
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: 23.08.2025 - 06:59