Pour une raison quelconque, la requête que j'ai placée directement dans DB fonctionne, mais lorsqu'elle est définie dans la syntaxe Joomla, elle ne renvoie qu'un seul résultat, et il devrait y en avoir beaucoup plus ...
Effacer la requête Mysql:
SELECT
vmp.virtuemart_product_id as 'product_id',
vmp.product_parent_id as 'parent_id',
vmp.product_sku as 'sku',
vmp.product_in_stock as 'stock',
vmp.published as 'published',
pc.virtuemart_category_id as "category"
FROM `mus_virtuemart_products` as vmp
JOIN mus_virtuemart_product_categories as pc ON pc.virtuemart_product_id=vmp.product_parent_id
WHERE vmp.product_parent_id>0 AND pc.virtuemart_category_id=105;
requête Joomly:
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select(array(
'vmp.virtuemart_product_id as product_id',
'vmp.product_parent_id as parent_id',
'vmp.product_sku as sku',
'vmp.product_in_stock as stock',
'vmp.published as published',
'pc.virtuemart_category_id as category'
))
->from($db->quoteName('#__virtuemart_products','vmp'))
->join('INNER', $db->quoteName('#__virtuemart_product_categories','pc') .
' ON (' . $db->quoteName('pc.virtuemart_product_id') . ' = ' . $db->quoteName('vmp.virtuemart_product_id') . ')')
->where($db->quoteName('pc.virtuemart_category_id') . ' = '. $db->quote($category). ' AND '. $db->quoteName('vmp.product_parent_id') . ' >0');
$db->setQuery($query);
$podaci = $db->loadAssocList();
J'ai essayé différentes combinaisons et je n'obtiens toujours qu'un seul résultat. Je pense que j'ai limité le problème à 1 condition dans la clause WHERE:
->where($db->quoteName('vmp.product_parent_id') . ' >0');
J'ai essayé de mettre "zéro" comme $db->quote($zero)
où $zero="0"
, Mais je n'ai rien changé.
Après quelques itérations dans mon code, je commence à obtenir une erreur:
Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à la version de votre serveur MariaDB pour la bonne syntaxe à utiliser près de '' à la ligne 3
Quand je change ma condition where
en seulement $db->quoteName('pc.virtuemart_category_id') . ' = '. $db->quote($category)
la requête fonctionne bien.
J'ai trouvé l'erreur dans ma requête.
Original:
JOIN mus_virtuemart_product_categories as pc ON pc.virtuemart_product_id=vmp.product_parent_id
Requête Joomla:
->join('INNER', $db->quoteName('#__virtuemart_product_categories','pc') .
' ON (' . $db->quoteName('pc.virtuemart_product_id') . ' = ' . $db->quoteName('vmp.virtuemart_product_id') . ')')
Au lieu de vmp.virtuemart_product_id
ça devrait être vmp.product_parent_id
La dernière requête correcte est donc:
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select(array(
'vmp.virtuemart_product_id as product_id',
'vmp.product_parent_id as parent_id',
'vmp.product_sku as sku',
'vmp.product_in_stock as stock',
'vmp.published as published',
'pc.virtuemart_category_id as category'
))
->from($db->quoteName('#__virtuemart_products','vmp'))
->join('INNER', $db->quoteName('#__virtuemart_product_categories','pc') .
' ON (' . $db->quoteName('pc.virtuemart_product_id') . ' = ' . $db->quoteName('vmp.product_parent_id') . ')')
->where($db->quoteName('pc.virtuemart_category_id') . ' = '. $db->quote($category). ' AND '. $db->quoteName('vmp.product_parent_id') . ' >0');
$db->setQuery($query);
$podaci = $db->loadAssocList();