Mysql query dinamic pivot table

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

Mysql query dinamic pivot table

Salut,
Am urmatorul query pe care vreau sa il utilizez cu php pentru cautare rafinata (faceted search).
Cum as putea sa il utilizez pentru ceva de genul

Cod: Selectaţi tot

			$sql = sprintf("SELECT *, p.id as pid FROM produse p 
							INNER JOIN categorii c on p.categorie=c.id
							LEFT JOIN product_attribute pa on p.id=pa.product_id
							LEFT JOIN attribute_description ad on pa.attribute_id=ad.attribute_id
							WHERE c.seo = '%s' AND p.vizibil= 1", $_GET['c']);

Cod: Selectaţi tot

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(ad.name = ''',
      name,
      ''', pa.text, NULL )) AS ',
      replace(name,' ', '_')
    )
  ) INTO @sql
FROM attribute_description, product_attribute;

SET @sql = CONCAT('SELECT p.id
                    , p.titlu
                    , p.descriere, ', @sql, ' 
                   FROM produse p
                   LEFT JOIN product_attribute AS pa 
                   ON p.id = pa.product_id
                   LEFT JOIN attribute_description AS ad
                   ON pa.attribute_id = ad.attribute_id where p.vizibil=''1'' 
                group by id having tara_de_origine = "romania" and instant = "da"');

PREPARE stmt FROM @sql;
EXECUTE stmt;

MarPlo Mesaje: 4343
Salut
Nu stiu daca am nteles. Vrei al doilea query sa-l folosesti in php, cum e primul intr-un sprintf()?
Daca e asa, care parte /data din el e dinamica, variabila?
Daca-l adaugi asa cum e in php, intr-un sir in variabila $sql, si apoi este executat /transmis la mysql, nu merge?

ciprian2301 Mesaje: 9
Am facut un sqlfiddle sa vezi cam cum ar arata structura bazei de date si cum ar arata rezultatul:
sqlfiddle.com/#!2/738b6/3

Titlurile de tabel (head) sunt generate dinamic in functie de attribute_description.name iar valorile sunt din product_attribute.text

Daca dau copy paste in phpmyadmin sql la executarea query-ului imi da eroarea

Cod: Selectaţi tot

#1243 - Unknown prepared statement handler (stmt) given to EXECUTE
Iar daca rulez direct din php

Cod: Selectaţi tot

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(ad.name = ''', name, ''', pa.t' at line 2
Multumesc.

MarPlo Mesaje: 4343
Problema ma cam depaseste.
La cautare pe internet dupa: "#1243 - Unknown prepared statement handler (stmt) given to EXECUTE" am gasit ca mai sunt intrebari legate de aceasta problema, dar fara o solutie directa.
Nu se poate executa asa din phpmyadmin sau php, trebuie folosit si aplicat in php "Stored Procedure", dar nu stiu cum se face.

Subiecte similare