Question

Cette question se rapporte à la schéma je suggère dans mon < a href = "https://stackoverflow.com/questions/3410362/design-of-an-eav-or-class-concrete-table-inheritance-database-for-stock-contr"> question originale concernant une application de contrôle des stocks.

Je suis en train de créer une requête MySQL qui fournit le stock actuel d'un élément particulier.

La requête fonctionne, mais je me demandais s'il y a un moyen plus efficace d'obtenir les informations dont j'ai besoin.

SELECT 's'.*,
    'v1'.'attribute_id' AS 'att1',
    'v1'.'value' AS 'val1'
    'v2'.'attribute_id' AS 'att2',
    'v2'.'value' AS 'val2'
FROM 'eav_ev' AS 'ev1'
INNER JOIN 'stock' AS 's' ON s.id = ev1.stock_id
INNER JOIN 'eav_ev' AS 'ev2' ON ev1.stock_id = ev2.stock_id
INNER JOIN 'eav_value' AS 'v1' ON v1.id = ev1.value_id
INNER JOIN 'eav_value' AS 'v2' ON v2.id = ev2.value_id
WHERE (ev1.entity_id = '45')
    AND (ev1.value_id <> ev2.value_id)
    AND (s.total > 0)
GROUP BY 'ev1'.'stock_id'
ORDER BY 'ev1'.'value_id' ASC

Cette fonction renvoie quelque chose le long des lignes de

array (1) {
    [0] => array(5) {
        ["stock_id"] => "2"
        ["att1"] => "3"
        ["val1"] => "M12"
        ["att2"] => "4"
        ["val2"] => "45"
    }
}

Il semble très compliqué, mais mon pauvre cerveau est incapable de venir avec quelque chose de mieux.

Toutes les suggestions?

Était-ce utile?

La solution

Au lieu d'utiliser attribute_id AS att1 vous pouvez également utiliser value AS attribute_X si vous stockez une liste d'attributs d'abord. Vous pouvez simplement mettre en cache la requête après que vous suffit de sélectionner toutes les données nécessaires à une requête claire.

En supposant que vous avez récupéré une liste d'ID d'attributs premier (à savoir SELECT attribute_id FROM eav_value), sélectionnez ceci:

SELECT
    v1.value_id AS attribute_1 -- (or whatever the ID was fetched in the first query)
    v2.value_id AS attribute_2 -- (or whatever the second ID was fetched in the first query)
...

Autres conseils

Après quelques recherches, je suis tombé sur la question / article suivant.

Zend Sélectionnez avec moi rejoindre les champs écrasant

Je suppose que cela va un moyen de répondre à ma propre question. Il semble que il est nécessaire de « processus post » la requête d'attribuer correctement les attributs. Assez facile à faire, mais semble en désordre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top