Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Połączenie 3 tabel, powtarza rekordy
neo1986kk
post
Post #1





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


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

Ten post edytował neo1986kk 28.08.2013, 07:43:13
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


item_projects LEFT JOIN item_projects_points LEFT JOIN projects_points
Go to the top of the page
+Quote Post
neo1986kk
post
Post #3





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


  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

Ten post edytował neo1986kk 28.08.2013, 09:12:17
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 Aktualny czas: 19.08.2025 - 10:51