Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] tabela z dwoma typami danych
bobo1
post 31.10.2008, 13:12:48
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 7.03.2008

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


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
Go to the top of the page
+Quote Post
Pilsener
post 31.10.2008, 13:44:56
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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.
Go to the top of the page
+Quote Post
michalg
post 31.10.2008, 19:24:32
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

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


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.
Go to the top of the page
+Quote Post
bobo1
post 1.11.2008, 16:11:35
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 7.03.2008

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


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

Ten post edytował bobo1 1.11.2008, 16:11:20
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:59