Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: podwójna konkatenacja i duplikaty rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
czp
Witam.

Używam relacyjnej bazy MySQL wersja 5.1.5 oraz jako frontega bazy pakietu LibreOffice wersja 3.3.0.
Napotkałem na problem przy tworzeniu do bazy zapytania z podwójną konkatenacją, gdzie po sobie występują co najmniej dwa zapytania z konkatenacją do różnych tabel bazy - wówczas w tak otrzymanym wyniku powielają mi się i powstają duplikaty niektórych połączonych tak pól i rekordów.
Problem polega na tym, że nie wiem jak zlikwidować te duplikaty lub jak zmienić zapytanie aby nie powstawały .questionmark.gifquestionmark.gifquestionmark.gif

Podaję kod zapytania:

  1. SELECT DISTINCT
  2. `dane`.`id_dane`,
  3.  
  4. GROUP_CONCAT(CONCAT_WS(' ', CONVERT(`dane_obieg`.`data`, CHAR(10)),`dane_obieg`.`obieg`, ' | ') SEPARATOR '\n') AS `data i obieg`,
  5.  
  6. GROUP_CONCAT(CONCAT_WS(' ', CONVERT(`dane_koniec`.`data_zakonczenia`, CHAR(10)),`lista_wynik`.`wynik_symbol`, ' | ') SEPARATOR '\n') AS `data i wynik `
  7.  
  8. FROM
  9. { OJ `rsd_wk`.`dane` AS `dane`
  10. LEFT OUTER JOIN `rsd_wk`.`dane_obieg` AS `dane_obieg` ON `dane`.`id_dane` = `dane_obieg`.`fk_id_dane`
  11. LEFT OUTER JOIN `rsd_wk`.`dane_koniec` AS `dane_koniec` ON `dane`.`id_dane` = `dane_koniec`.`fk_id_dane`
  12. LEFT OUTER JOIN `rsd_wk`.`lista_wynik` AS `lista_wynik` ON `dane_koniec`.`fk_id_lista_wynik` = `lista_wynik`.`id_lista_wynik`}
  13.  
  14. GROUP BY `id_dane`;
  15.  
  16.  

poniżej podaję link do obrazu przedstawiającego zapytanie kwerendy oraz wynik zapytania:

obraz zapytania i wyniku


Np. w rekordzie nr 2 w polu `data i obieg` widzimy 3 połączone (takie same) rekordy a powinien być jeden. Dopóki w takich zapytaniach nie było drugiej konkatenacji czyli wyniku w polu `data i wynik` to problem ten nie występował.



========================================

Dalej męczę ten temat ale bez zadowalających efektów.

Zauważyłem jednak, że jak podzielę to zapytanie i utworzę dwie kwerendy, z których w jednej utworzę zapytanie z podwójną konkatenacją do tabeli `dane_obieg`, a w drugiej zapytanie z podwójną konkatenacją do tabeli `dane_koniec` to obie osobno działają bez zarzutu. Gdy teraz utworzę trzecia kwerendę i połączę dwie pierwsze kwerendy złączeniem wewnętrznym to otrzymany wynik jest całkowicie poprawny i nie mam powielonych duplikatów żadnych rekordów.

Sposób ten jednak nie odpowiada mi bo tak naprawdę w tym jednym zapytaniu chcę się odnieść do około 10 tabel z podwójną konkatenacją i rozbijanie jednego zapytania na wiele kwerend po prostu zagmatwa całość.

Potrzebuję więc jednego zapytania ale niestety robię w nim gdzieś błąd skoro powielają się rekordy przy złączeniach z podwójną konkatenacją.
wookieb
http://dev.mysql.com/doc/refman/5.0/en/gro...on_group-concat
Użyj słowa kluczowego "distinct"
czp
Witam.

Dzieki "wookieb" za odpowiedź - oczywiście pomogło.
Przyznam, że czytałem tego manuala i próbowałem użyć DISTINCT ale z ze skutkiem negatywnym bo zmyliły mnie nawiasy [ ] z manuala.
Jeszcze raz dzięki - zapytanie śmiga aż miło:

  1.  
  2. SELECT
  3. `dane`.`id_dane`,
  4.  
  5. GROUP_CONCAT(DISTINCT CONCAT_WS(' ', CONVERT(`dane_obieg`.`data`, CHAR(10)),`dane_obieg`.`obieg`, ' | ') SEPARATOR '\n') AS `data i obieg`,
  6. GROUP_CONCAT(DISTINCT CONCAT_WS(' ', CONVERT(`dane_koniec`.`data_zakonczenia`, CHAR(10)),`lista_wynik`.`wynik_symbol`, ' | ') SEPARATOR '\n') AS `data i wynik`
  7.  
  8.  
  9. FROM
  10. { OJ `rsd_wk`.`dane` AS `dane`
  11.  
  12. LEFT OUTER JOIN `rsd_wk`.`dane_obieg` AS `dane_obieg` ON `dane`.`id_dane` = `dane_obieg`.`fk_id_dane`
  13. LEFT OUTER JOIN `rsd_wk`.`dane_koniec` AS `dane_koniec` ON `dane`.`id_dane` = `dane_koniec`.`fk_id_dane`
  14. LEFT OUTER JOIN `rsd_wk`.`lista_wynik` AS `lista_wynik` ON `dane_koniec`.`fk_id_lista_wynik` = `lista_wynik`.`id_lista_wynik`}
  15.  
  16.  
  17. GROUP BY `id_dane`;
  18.  


powyżej poprawne zapytanie.
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.