何らかの理由でDBに直接置いたクエリは機能しますが、Joomla構文で設定すると、結果が1つだけ返され、さらに多くの結果が得られるはずです...
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;
_
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();
_
さまざまな組み合わせを試しましたが、常に1つの結果しか得られません。私は問題をWHERE句の1つの条件に制限したと思います:
_->where($db->quoteName('vmp.product_parent_id') . ' >0');
_
「ゼロ」を$db->quote($zero)
where _$zero="0"
_に設定しようとしましたが、何も変更しませんでした。
コードを数回繰り返した後、エラーが発生し始めました。
SQL構文にエラーがあります。 MariaDBサーバーのバージョンに対応するマニュアルで、3行目付近の ''の近くで使用する正しい構文を確認してください
where
条件を$db->quoteName('pc.virtuemart_category_id') . ' = '. $db->quote($category)
のみに変更すると、クエリは正常に機能します。
クエリにエラーが見つかりました。
元の:
JOIN mus_virtuemart_product_categories as pc ON pc.virtuemart_product_id=vmp.product_parent_id
Joomlaクエリ:
->join('INNER', $db->quoteName('#__virtuemart_product_categories','pc') .
' ON (' . $db->quoteName('pc.virtuemart_product_id') . ' = ' . $db->quoteName('vmp.virtuemart_product_id') . ')')
の代わりに vmp.virtuemart_product_id
そのはず vmp.product_parent_id
したがって、最終的な正しいクエリは次のとおりです。
$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();