Magento query SQL: Ottenere tutti i prodotti semplici, che “non sono visibili singolarmente”

Sto cercando di scrivere una query SQL direttamente sul database di Magento che ottiene tutti i prodotti Semplici che hanno l’attributo di visibilità del “non visibile singolarmente”, per cui il valore è 1 credo.

Qualcuno può aiutarmi con questo? Finora ho scoperto che la visibilità valore è impostato nella tabella

catalog_product_entity_int

ma non sono stati in grado di progredire ulteriormente. Grazie

  • Vorrei consigliamo di utilizzare il prodotto collezione
  • Perché sql direttamente sul database?
InformationsquelleAutor Gga | 2012-12-13

 

2 Replies
  1. 4

    Ci sono molte ragioni per non fare questo senza l’ORM, che può (o non può) si applicano a tutte le vostre esigenze (archivio di filtri, la lettura dei dati dalla tabella corretta, ecc). Almeno, è possibile utilizzare il prodotto collezione di oggetti per costruire la query che si deve eseguire:

    $coll = Mage::getModel('catalog/product')->getCollection();
    $coll->addAttributeToFilter('visibility' , Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE);
    echo $coll->getSelect();

    La query risultante sarà simile a questa:

    SELECT `e`.*, IF(at_visibility.value_id > 0, at_visibility.value, at_visibility_default.value) AS `visibility`
    FROM `catalog_product_entity` AS `e`
    INNER JOIN `catalog_product_entity_int` AS `at_visibility_default`
        ON (`at_visibility_default`.`entity_id` = `e`.`entity_id`)
        AND (`at_visibility_default`.`attribute_id` = '526')
        AND `at_visibility_default`.`store_id` = 0
    LEFT JOIN `catalog_product_entity_int` AS `at_visibility` ON (`at_visibility`.`entity_id` = `e`.`entity_id`)
        AND (`at_visibility`.`attribute_id` = '526')
        AND (`at_visibility`.`store_id` = 1)
    WHERE (IF(at_visibility.value_id > 0, at_visibility.value, at_visibility_default.value) = '1')
    • Evviva, evviva, evviva! Grazie.
  2. 1

    Spero che questo possa funzionare non testato.

    $sql = "SELECT * FROM catalog_product_entity_int WHERE visibility=1";
    $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
    foreach ($connection->fetchAll($sql) as $arraytest) {
        echo $arraytest['name'];
    }
    • Grazie per la risposta, purtroppo la struttura della tabella è un po ‘ più sepolto di che, ma devo provare e adattare l’SQL. Grazie
    • quindi suggerisco di utilizzare il prodotto collezione, piuttosto che alla scrittura di query personalizzati . che è anche cattive pratiche in magento

Lascia un commento