Numar de Join-uri in functie de conditie

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
sterica
Mesaje: 285

Numar de Join-uri in functie de conditie

Salutare,

Am urmatorul tabel mysql:

Cod: Selectaţi tot

tblA
+----+--------+-------+------------+
| ID |  CLASA | NIVEL | ID_PARINTE |
+----+--------+-------+------------+
| 1  | clasa1 |   1   |     1      |
| 2  | clasa2 |   2   |     1      |
| 3  | clasa3 |   3   |     2      |
| 4  | clasa4 |   4   |     3      |
+----+--------+-------+------------+

SELECT
tblA4.CLASA,
tblA4.NIVEL,
tblA2.ID AS ID_LVL_2

FROM tblA as tblA4
LEFT JOIN tblA as tblA3 ON tblA3.ID = tblA4.ID_PARINTE
LEFT JOIN tblA as tblA2 ON tblA2.ID = tblA3.ID_PARINTE

WHERE tblA4.NIVEL = 4


return
+--------+-------+----------+
|  CLASA | NIVEL | ID_LVL_2 |
+--------+-------+----------+
| clasa4 |   4   |    2     |
+--------+-------+----------+
Incerc sa gasesc o modalitate de a se face automat join-urile in functie de conditia din WHERE.
In cazul de fata daca NIVEL = 4, se fac doua join-uri, daca NIVEL = 5 se fac trei join-uri la acelasi tabel.

Vreau sa aflu ID_PARINTE de nivel 2 pentru clasele care sunt de nivel mai mare de 2.

Sql-ul este rulat in PHP

Multumesc!

MarPlo Mesaje: 4343
Cu ce tabel /tabeluri vrei sa faci Join si ce vrei sa selectezi din celalalt tabel?
Ce Select ai pentru doua Join-uri?

sterica Mesaje: 285
fac join-uri cu acelasi tabel, datele fiind inlantuite

MarPlo Mesaje: 4343
Nu inteleg de ce sa faci Join-uri la acelas tabel. Sau poate nu se intelge exact ce vrei sa obtii din acel tabel.
Din ce am inteles: "Vreau sa aflu ID_PARINTE de nivel 2 pentru clasele care sunt de nivel mai mare de 2.", s-ar putea face asa:

Cod: Selectaţi tot

SELECT * FROM tblA WHERE ID_PARINTE=2 AND NIVEL>2

sterica Mesaje: 285
Pentru exemplificare mai adaug o coloana produse.
Am refacut tabele si query

Cod: Selectaţi tot

tblA
+----+---------+--------+-------+------------+
| ID | PRODUS  |  CLASA | NIVEL | ID_PARINTE |
+----+---------+--------+-------+------------+
| 1  | Produs1 | clasa1 |   1   |     1      |
| 2  | Produs2 | clasa2 |   2   |     1      |
| 3  | Produs3 | clasa3 |   3   |     2      |
| 4  | Produs4 | clasa4 |   4   |     3      |
+----+---------+--------+-------+------------+

SELECT
tblA4.CLASA,
tblA4.NIVEL,
tblA2.ID AS ID_LVL_2

FROM tblA as tblA4
LEFT JOIN tblA as tblA3 ON tblA3.ID = tblA4.ID_PARINTE
LEFT JOIN tblA as tblA2 ON tblA2.ID = tblA3.ID_PARINTE

WHERE tblA4.PRODUS = 'Produs4'


return
+--------+-------+----------+
|  CLASA | NIVEL | ID_LVL_2 |
+--------+-------+----------+
| clasa4 |   4   |    2     |
+--------+-------+----------+
Un produs care este de nivel 4 vreau sa aflu care este corespondentul clasei de nivel 2.

MarPlo Mesaje: 4343
Nu inteleg logica, nu e nici un produs, clasa sau nivel la fel pe aceeasi coloana; dar poate poti sa obtii ce vrei cu doua Select-uri.
In primul selectezi ce vrei dupa nivel, si faci al doilea Select in functie de rezutatul de la primul.

Subiecte similare