Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Transpozycja przy pomocy zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
Pilsener
Witajcie, mam tabelę w bazie, której schemat w dużym uproszczeniu przedstawia się tak:

Nazwisko 1||Produkt 1||Dane||Dane
Nazwisko 1||Produkt 2||Dane||Dane
Nazwisko 1||Produkt 3||Dane||Dane
Nazwisko 2||Produkt 1||Dane||Dane
Nazwisko 2||Produkt 3||Dane||Dane
Nazwisko 3||Produkt 1||Dane||Dane
Nazwisko 3||Produkt 2||Dane||Dane
Nazwisko 3||Produkt 3||Dane||Dane

Jest spora redundancja, ale nie ma możliwości zmiany tego, musi być jak jest.

Chciałbym zrobić coś takiego:

-------------||Produkt 1||Produkt 2||Produkt 3
Nazwisko 1||Dane-----||Dane-----||Dane----
Nazwisko 2||Dane-----||Dane-----||Dane---- etc.
Nazwisko 3||Dane-----||Dane-----||Dane----


Udało mi się to zrobić w PHP, jednak działa pierońsko wolno. Dałoby radę to załatwić zapytaniem do bazy, tak, żeby od razu pobrać taką tabelę? Myślę, że byłoby o wiele szybciej, bo przemieliło by raz, a dobrze...

Edyta - znalazłem coś takiego do transpozycji:
Kod
$q="SELECT * FROM users";
$odp=mysql_query($q);
echo '<table border="1">';
while ($obj=mysql_fetch_field($odp))
  {
  echo '<tr>';
  echo '<td><b>'.$obj->name.'<b></td>';
  for ($i=0; $i<mysql_num_rows($odp); $i++)
    {
    echo '<td>'. mysql_result($odp, $i , $obj->name )  .'</td>';
    }
  echo '</tr>';
  }
echo '<table>';
- działa szybko, ale wyświetla mi tak:

Nazwisko 1||Nazwisko 1||Nazwisko 1||Nazwisko 2||Nazwisko 2||Nazwisko 3||Nazwisko 3||Nazwisko 3
Produkt 1--||Produkt 2--||Produkt 3--||Produkt 1--||Produkt 3--||Produkt 1--||Produkt 2--||Produkt 3--
Dane||Dane||Dane||Dane||
Dane||Dane||Dane||Dane|| etc.

Trzeba dokonać częściowej transpozycji, ale nie mam pojęcia jak to zrobić.
kitol
Ja to rozwiązałem w następujący sposób:
Założyłem sobie tabelę opisującą "tabelkowy" układ danych:

wiersz (int),
kolumna(int),
wartosc(int)

Pierwsze zapytanie jest skonstruowane tak, że wypełnia podaną wartościami w odpowiednich miejscach. Drugie pobiera dane w kolejności odpowiedniej do wyswietlenia w PHP.
SELECT wiersz,kolumna,wartosc FROM tabela ORDER BY wiersz, kolumna
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.