Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wyświetlić dane z jednej kolumny w kilku
Forum PHP.pl > Forum > Bazy danych > MySQL
ostry400
Witam

Mam mały problem mam w bazie

jak zrobić żeby posortować te wyniki w kolumnach.
mam taką tabelkę w bazie

  1. id czas ile
  2.  
  3. 299 00:00:00 1
  4. 284 00:00:02 1
  5. 279 00:00:05 1
  6. 299 00:00:19 2
  7. 284 00:00:22 2
  8. 279 00:00:24 2
  9. 299 00:00:30 3
  10. 284 00:00:35 3
  11. 279 00:00:39 3


i tak dalej id jest ok 1tyś a wyników ok 3tyś

Teraz jak zrobić żeby wyszło mi to w kolumnach przypisując się id np 299 i wszystkie 3 czasy tego id czyli :

  1. id czas 1 czas2 czas3
  2.  
  3. 299 00:00:00 00:00:19 00:00:30
  4. 284 00:00:02 00:00:22 00:00:35
  5. 279 00:00:05 00:00:24 00:00:39
  6.  
  7.  


Wiem jak to poustawiać i wyświetlić w php w sposób następujący ale niestety nie może tak być
  1. id czas ile
  2. 299 00:00:00 1
  3. 299 00:00:19 2
  4. 299 00:00:30 3
  5. 284 00:00:02 1
  6. 284 00:00:22 2
  7. 284 00:00:35 3
  8. 279 00:00:05 1
  9. 279 00:00:24 2
  10. 279 00:00:39 3


operacje łączenia tabel i wyświetlania w php na stronach mam opanowane ale tego nigdzie nie mogę znaleźć

Później będe jeszcze sobie odejmował te wyniki aby liczyć międzyczasy ale myślę że z tym problemu nie będzie

Chodzi mi o jakiś pomysł jak to zrobić albo jakieś sugestie kodu do Mysql questionmark.gif

Jest w stanie mi ktoś pomóc questionmark.gif

Pozdrawiam
Firebright
Spróbuj wykorzystać funkcję GROUP_CONCAT(), np:
  1. SELECT id, GROUP_CONCAT(czas) AS czasy
  2. FROM czasy
  3. GROUP BY id

Co prawda nie jest to dokładnie to co napisałeś, ale dostaniesz poszczególne czasy w jednej kolumnie po przecinku. Można napisać zapytanie, które wyciągnie dane tak jak potrzebujesz ale będzie mniej wydajne i ograniczone ilością kolumn.
ostry400
No dobre dobre ale w tej jednej kolumnie jak mi to wszystko wywali to niestety są wyniki nie po kolei i niema jak tego posegregować sad.gif

Chyba będę musiał zrobić trochę na piechotę czyli

stworze sobie 3 tabele do wszystkich wrzucę to samo i powyciągam z 1 tabeli wyniki oznaczone 1 z 2 tabeli oznaczone 2 i z 3 tabeli oznaczone 3 tongue.gif +dołożę tabele z danymi które ukryte są za tymi numerami ... wyświetlę to i będzie tongue.gif gorzej jak przyjdzie mi zrobić 10 tabel tongue.gif

chyba że jeszcze ktoś ma jakiś pomysł questionmark.gif
Firebright
Można posortować smile.gif:
  1. SELECT id, GROUP_CONCAT(czas) AS czasy
  2. FROM (SELECT id, czas FROM czasy ORDER BY id, czas) cz
  3. GROUP BY id
maly_swd
  1. SELECT c1.id, c1.czas AS czas1, c2.czas AS czas2, c3.czas AS czas3 FROM czasy c1
  2. JOIN czasy c2 ON c1.id=c2.id AND c2.ile=2
  3. JOIN czasy c3 ON c1.id=c3.id AND c3.ile=3
  4. WHERE c1.ile=1
ostry400
Odkopię trochę swój temat

Jak można by było zmienić ten kod żeby wyświetlił jakiekolwiek wyniki jeśli niema np c3.ile=3 po prostu go jeszcze niema ale za kilka min np się pojawi ale do tej pory chciałbym oglądać posortowane te 2 kolumny.

Bo jeśli go niema to nic się nie wyświetli

Czyli do bazy wpadają nowe wyniki i jak będzie np ile=3 to się zaczynają pojawiać wyniki ale do puki nie pojawi się to 3 to nic nie będzie widoczne.

Czy da radę coś takiego zrobić w prosty sposób pod Myslq czy lepiej ugryźć to z pod php questionmark.gif i zrobić pętle questionmark.gif
maly_swd
zamiast
JOIN czasy c3 ON c1.id=c3.id AND c3.ile=3
daj
LEFT JOIN czasy c3 ON c1.id=c3.id AND c3.ile=3
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.