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
-
Afisare numar cel mai mare dintr o coloana
PHP - MySQL - XML
Primul mesaj
Bună Marplo
Vreau să extrag din coloan pret cel mai mare numar ca de exemplu 4444.
Mie imi afisează 54 în loc de 4444, dacă în loc de 4444 modific...
Ultimul mesaj
Am schimbat `pret` varchar(20) DEFAULT NULL in `pret` int(11) NOT NULL ca la tine si merge.
Multumesc