![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 20.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Czy ktos moglby mi podpowiedziec jak skonstruowac zapytanie SELECT i czy jest to mozliwe aby otrzymac dynamiczne kolumny? Posluze sie przykladem: Mamy Tabice pierwsza: identyfikator, oraz kto wysyla i kto odbiera. Tablica_1 ID sender receiver 1 A A 2 A B 3 A C 4 B B 5 B C 6 C A Tablica 2 posiada klucz obcy odwolujacy sie do tablicy pierwszej oraz kod bledu i ilosc wystapien. Problem jest ze nieznana jest liczba mozliwych kodow bledu oraz mozliwosc wystapienia kilku bledow dla jednego wiersza z Tabeli 1. Tak jak w przykladzie dla B B wystapilo 5 bledow o kodzie 403 i 2 bledy 302. Tablica_2 ID error_code count 4 403 5 4 302 2 6 403 1 Wyniki chcialbym uzyskac w takiej postaci: ID sender receiver 403 302 1 A A 0 0 2 A B 0 0 3 A C 0 0 4 B B 5 2 5 B C 0 0 6 C A 1 0 Z gory dziekuje za pomoc. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 1 Dołączył: 6.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Należy zastosować funkcję COUNT i złączenie LEFT JOIN
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 20.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Robilem left join da wynik:
1 A A 2 A B 3 A C 4 B B 403 5 4 B B 302 2 5 B C 6 C A 403 1 A mnie chodzi zeby dalo: ID s r 403 302 1 A A 2 A B 3 A C 4 B B 5 2 5 B C 6 C A 1 0 czyli te kody bledow staly sie kolumnami. da sie ? jakis pomysl ? Ten post edytował kepas 20.06.2007, 21:47:21 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 1 Dołączył: 6.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 20.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
To rozwiazanie bardzo mi pomaga.
Jedyny problem jaki pozostaje to ze nigdy nie wiem jaki bedzie error_code wiec nie moge go na sztywno wpisac w zapytanie. Istnieje sposob aby dodawac te LEFT JOINy jakos dynamicznie czy to juz musze zrobic w PHP? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 1 Dołączył: 6.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Można wykonać zapytanie z grupowaniem również wg kodu błędu:
Ale wtedy wyniki dostaniesz w tym formacie, co nie chciałeś mieć na początku. Kolejny sposób, to wykonanie jednego zapytania o kody błędów, które znajdują się w tablicy 'tablica2':
i zbudowanie zapytania z zastosowaniem wyników, które otrzymasz z powyższego zapytania. Coś w stylu: Kod $result = mysql_query('SELECT DISTINCT error_code FROM tablica2');
if ($result) { $sql_select = ''; $sql_join = ''; $i = 2; while($row = mysql_fetch_assoc($result)) { $sql_select .= ",COUNT(t$i.id) AS error" . $row['error_code']; $sql_join .= " LEFT JOIN tablica2 AS t$i ON (t$i.id=t1.id AND t$i.error_code=' . $row['error_code'] . ')'; ++$i; } if ($sql_join) { $sql = "SELECT t1.id,sender,receiver$sql_select FROM tablica1 AS t1$sql_join"; // wykonanie zapytania i odczytanie wyników } } Ten post edytował Norbas 21.06.2007, 19:27:49 -------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 20.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dokladnie tak zrobilem
![]() Dzieki wielkie za pomoc ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.06.2025 - 12:00 |