【发布时间】:2014-07-26 03:20:55
【问题描述】:
我在 Joomla 中有这个查询:
$query
->select($db->quoteName(array('#__session.session_id', '#__hikashop_cart.session_id', '#__hikashop_cart.cart_id', '#__hikashop_cart_product.product_id', '#__hikashop_product.product_parent_id', '#__hikashop_cart_product.cart_product_quantity')))
->from($db->quoteName('#__hikashop_cart'))
->join('INNER', $db->quoteName('#__hikashop_cart_product') . ' ON #__hikashop_cart.cart_id = #__hikashop_cart_product.cart_id')
->join('INNER', $db->quoteName('#__hikashop_product') . ' ON #__hikashop_cart_product.product_id = #__hikashop_product.product_id')
->join('INNER', $db->quoteName('#__session') . ' ON #__hikashop_cart.session_id = #__session.session_id')
->where($db->quoteName('hady9_session.session_id').' = '.$db->quote($thesession).'AND ('.$db->quoteName('hady9_hikashop_product.product_parent_id').' = '.$db->quote('3578').'OR'.$db->quote('4482').'OR'.$db->quote('4947').'OR'.$db->quote('8047').'OR'.$db->quote('5102').'OR'.$db->quote('5257').'OR'.$db->quote('5412').'OR'.$db->quote('8202').'OR'.$db->quote('5567').'OR'.$db->quote('5722').'OR'.$db->quote('5877').'OR'.$db->quote('8357').'OR'.$db->quote('6032').'OR'.$db->quote('6187').'OR'.$db->quote('6342').'OR'.$db->quote('8512').')');
我需要改成这样的:
->select($db->quoteName(array('#__hikashop_product.product_parent_id', Sum('#__hikashop_cart_product.cart_product_quantity'))))
->from($db->quoteName('#__hikashop_cart'))
->join('INNER', $db->quoteName('#__hikashop_cart_product') . ' ON #__hikashop_cart.cart_id = #__hikashop_cart_product.cart_id')
->join('INNER', $db->quoteName('#__hikashop_product') . ' ON #__hikashop_cart_product.product_id = #__hikashop_product.product_id')
->join('INNER', $db->quoteName('#__session') . ' ON #__hikashop_cart.session_id = #__session.session_id')
->where($db->quoteName('hady9_session.session_id').' = '.$db->quote($thesession))
->groupby($db->quoteName('#__hikashop_product.product_parent_id'))
->having($db->quoteName('#__hikashop_product.product_parent_id').' = '.$db->quote('3578').'OR'.$db->quote('4482').'OR'.$db->quote('4947').'OR'.$db->quote('8047').'OR'.$db->quote('5102').'OR'.$db->quote('5257').'OR'.$db->quote('5412').'OR'.$db->quote('8202').'OR'.$db->quote('5567').'OR'.$db->quote('5722').'OR'.$db->quote('5877').'OR'.$db->quote('8357').'OR'.$db->quote('6032').'OR'.$db->quote('6187').'OR'.$db->quote('6342').'OR'.$db->quote('8512').')');
第二个的区别是:我需要 #__hikashop_cart_product.cart_product_quantity 字段上的 SUM,#__hikashop_product.product_parent_id 字段上的 GROUP BY 并使用 HAVING 条件,使用 #__hikashop_product.product_parent_id 作为一堆可能的数字。
在 phpmyadmin 中进行测试时,该查询完成了我需要它执行的操作,但我不确定在 joomla 中使用 SUM、GROUP BY 和 HAVING 部分的正确语法。
我已将此查询修改为:
$query->select($db->quoteName(array('#__hikashop_product.product_parent_id', ('sum('.$db->quoteName('#__hikashop_cart_product.cart_product_quantity').')'))));
$query->from($db->quoteName('#__hikashop_cart'));
$query->join('INNER', $db->quoteName('#__hikashop_cart_product') . ' ON #__hikashop_cart.cart_id = #__hikashop_cart_product.cart_id');
$query->join('INNER', $db->quoteName('#__hikashop_product') . ' ON #__hikashop_cart_product.product_id = #__hikashop_product.product_id');
$query->join('INNER', $db->quoteName('#__session') . ' ON #__hikashop_cart.session_id = #__session.session_id');
$query->where($db->quoteName('#__session.session_id').' = '.$db->quote($thesession));
$query->group($db->quote('#__hikashop_product.product_parent_id'));
$query->having($db->quote('#__hikashop_product.product_parent_id').' = '.$db->quote('3578').'OR'.$db->quote('4482').'OR'.$db->quote('4947').'OR'.$db->quote('8047').'OR'.$db->quote('5102').'OR'.$db->quote('5257').'OR'.$db->quote('5412').'OR'.$db->quote('8202').'OR'.$db->quote('5567').'OR'.$db->quote('5722').'OR'.$db->quote('5877').'OR'.$db->quote('8357').'OR'.$db->quote('6032').'OR'.$db->quote('6187').'OR'.$db->quote('6342').'OR'.$db->quote('8512').')');
我在 atm 收到此错误:
1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行 SQL=SELECT 的“.cart_product_quantity) FROM hady9_hikashop_cart INNER JOIN `hady9_hik”附近使用正确的语法......
任何帮助将不胜感激。
【问题讨论】: