Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połączenie 3 tabel, powtarza rekordy
Forum PHP.pl > Forum > Bazy danych > MySQL
neo1986kk
projects_points - ogólne nazwy punktów projektu
//id
//name
//important
//mainproject

item_projects_points - punkty w danym projekcie
//id
//project
//status

item_projects - projekty
//id
//item

No dobra to trochę wyjaśnię, w tabeli item_projects zapisuję który projekt jest przypisany do danego produktu
W tabeli projects_points są zdefiniowane punkty projektu, a w tabeli item_projects_points są zapisywane statusy punktów (zrobiony, nie zrobiony)

Chciałbym pobrać z bazy te dane w ten sposób żeby pokazywał mi nazwę punktu i status w danym produkcie


  1. SELECT projects_points.name, item_project_points.STATUS
  2. FROM item_project_points
  3. LEFT JOIN item_projects ON item_project_points.project = item_projects.id
  4. RIGHT JOIN projects_points ON item_projects.project = projects_points.mainproject
  5. WHERE item_projects.item =73
  6. GROUP BY item_project_points.id
  7. LIMIT 0 , 30


Takie zapytanie pokazuje dobrze statusy, ale nazwa punktu jest ciągle z pierwszego rekordu


  1. SELECT projects_points.name, item_project_points.STATUS
  2. FROM item_project_points
  3. LEFT JOIN item_projects ON item_project_points.project = item_projects.id
  4. RIGHT JOIN projects_points ON item_projects.project = projects_points.mainproject
  5. WHERE item_projects.item =73
  6. GROUP BY projects_points.id
  7. LIMIT 0 , 30


Tutaj sytuacja jest odwrotna, nazwy są zgodne z id punktu, ale status ciągle z pierwszego

Zamieniałem LEFT join na RIGHT join, zamieniałem kolejność zapytania, ale to nic nie zmienia....
mmmmmmm
item_projects LEFT JOIN item_projects_points LEFT JOIN projects_points
neo1986kk
  1. SELECT projects_points.name, item_project_points.STATUS
  2. FROM item_projects
  3. LEFT JOIN item_project_points ON item_project_points.project = item_projects.id
  4. LEFT JOIN projects_points ON item_projects.project = projects_points.mainproject
  5. WHERE item_projects.item =73
  6. GROUP BY item_project_points.id
  7. LIMIT 0 , 30


Niestety bez zmian, nazwa zawsze ta sama

Jeszcze tak sobie myślę

  1. LEFT JOIN projects_points ON item_projects.project = projects_points.mainproject
w tej linijce item_projects.project=1, a w project_points jest kilka punktów, gdzie mainproject=1, więc moze on dla każdego rekordu z item_project_points dopasowuje ten pierwszy, dlatego że 1=1

Chociaż jak wywalę grupowanie to pokazuje dla każdego punktu wszystkie nazwy w taki sposób:

ID PUNKTU/ NAZWA:
1/nazwa1
1/nazwa2
1/nazwa3
2/nazwa1
2/nazwa2
2/nazwa3
3/nazwa1
itd itd
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.