Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] tabela z dwoma typami danych
Forum PHP.pl > Forum > Przedszkole
bobo1
Zastanawiam się w jaki sposób mogę zrobić następującą operację. Mam bazę danych w której przechowuje dane, które mogą być dwóch różnych typów.

Typ|klucz|wartosc
a|1|aaa
a|2|bbb
b|1|aabb
b|2|bbaa
............

Chciałbym wyświetlić teraz w jednej tabeli informacje w następujący sposób

1|aaa|aabb
2|bbb|bbaa
...............

W jaki sposób powinno wyglądać zapytanie.

SELECT * FROM tabela WHERE typ='a' OR typ='b' LIMIT 0,10

chodzi o to, żeby w jednym zapytaniu dostał 10 wyników typu a i typu b
Pilsener
To co proponujesz to tak zwana TRANSPOZYCJA - nie wydaje mi się, żeby dało się to zrobić zapytaniem (chyba, że jakiś trigger - jeśli tak, to ja się chętnie dowiem jak). Kiedyś miałem podobny problem - nie da się tego rozwiązać inaczej jak wyświetlić przy pomocy PHP.
michalg
Witam

Przykład dla postgresa, przy założeniu, że dla danego klucza nie zawsze jest wartość typu a i nie zawsze b (dlatego full outer join, w przeciwnym wypadku można zastosować np join):

  1. SELECT COALESCE(typ_a.klucz, typ_b.klucz) AS klucz, typ_a.wartosc, typ_b.wartosc
  2.  
  3. FROM ( SELECT klucz, wartosc FROM tab WHERE typ = 'a'
  4. ) AS typ_a
  5.  
  6. FULL OUTER JOIN ( SELECT klucz, wartosc FROM tab WHERE typ = 'b'
  7. ) AS typ_b ON typ_a.klucz=typ_b.klucz;


Nie znam mysql, ale tam też to raczej powinno być możliwe.
Przy większej ilości typów będzie trochę trudniej, ale nie niemożliwe.

PS. Dlaczego ten sql nie jest wyświetlany tak, jak go wpiszę? Tzn, zmienia formatowanie.
bobo1
Próbuję coś z tym zrobić ale nadal nic sad.gif .

Tabela wygląda dokładnie tak:
data
typ
pozycja
imie
nazwisko
punkty

Ogólnie zapytanie ma zwracać najnowsze dane każdego typu, posortowane według pozycji, ograniczone do 10 najwyższych pozycji

w następujący sposób:
pozycja typ imie nazwisko punkty, typ imie nazwisko punkty

czyli

1 typ-a Jan Kowalski 100, typ-b Jan Nowak 50
...

W zaprezentowanym zapytaniu wszystkie dostępne funkcje są wbudowane w MySqla, ale ciągle nie działa.
Przy wykorzystaniu PHP, ale jaka powinna być metodologia ?

Generalnie rozwiązałem problem. Wykorzystałem PHP i stworzyłem dwie dodatkowe tablice z tym samym kluczem. Następnie w pętli for wszystko wyświetliłem.

Istnieje też możliwość stworzenia tymczasowej tabeli w bazie danych.

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