danielbuca multumesc, am sa ma documentez mai incolo despre acest termen![]()
Si oricum ajuta si normalizarea bazei de date, se simte cand o baza de date nu are indecsi sau/si e gandita prost.
1. SELECT * FROM produse AS a JOIN ( SELECT RAND()*( SELECT MAX(id) FROM produse ) AS rid) AS b WHERE a.gigel >= b.rid and categorie='$categorie' and subcategorie='$subcategorie' LIMIT 15
Trebuie sa intelegi un query cat de cat..
Sa-mi spui daca a functionat
2. e foarte important sa-ti indexezi corect coloanele.. in acest caz sa ai index pe doc_id.
Daca era "select * from produse WHERE id = 10 ORDER BY doc_id DESC LIMIT 20" indexul trebuia sa fie composite (adica un index multi-coloane) pe doc_id, id (in ordinea asta)
3. Nu e bine gandita treaba cu count-ul. Eu personal as adauga in tabelul cu subcategorii o coloana in care sa-mi tin numarul de produse. Un unsigned SMALLINT de 5 sa zicem (daca nu depasesti 65535 produse/subcategorie).
E simplu si eficient
Un mic exemplu: Se adauga un produs si se alege subcategoria "test" (care are id-ul 10). Pe langa query-ul de "INSERT INTO produse ...." mai punem un query "UPDATE subcategorii SET count = count+1 WHERE subcategorie_id = 10".
Iar cand vrei sa vezi cate produse ai la o subcategorie:
SELECT count AS numrows FROM subcategorii WHERE subcategorie_id = '$produs_subcategorie_id'
$produs_subcategorie_id reprezinta id-ul subcategoriei din care face parte produsul respectiv.
Daca vrei sa afiseze fiecare subcategorie si numarul total de produse pentru fiecare subcategorie
$query = mysql_query("SELECT * FROM subcategorii ");
while ($row = mysql_fetch_array($query)) {
echo $row['subcategorie_nume'].' ('.$row['count'].' )<br/>';
}
Alea le-am pus fictiv acolo.. mai departe te descurci tu.
Important: in acel query am vazut "$nume_subcategorie", niciodata nu fa legatura intre tabele pe varchar/text sau mai stiu eu ce.. foloseste INT (si variante de int) si coloanele de legatura sa fie de acelasi tip si lungime.
http://dev.mysql.com/doc/refman/5.0/...ric-types.html
later edit: corectari





Răspunde cu citat