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.