按兰德订购,不返回任何数据

时间:2014-02-06 15:27:29

标签: php sql module prestashop

好的,所以我试图获取一个随机显示的图像列表,而不是前6个或后6个。如果在ASC或DESC中显示它们,两者都可以正常工作,但是,只要我添加RAND,就没有了再说一遍,它只是认为没有图像并显示“没有图像”。我已经尝试过移动RAND,并尝试用RAND替换DESC等,但是整个网站要么加载空白,要么只是认为没有内容可以显示..任何人都能够解释我出错的地方? ?

以下是相关代码,如果您想查看更多代码,请与我们联系。

/**
  * Return manufacturers
  *
  * @param boolean $get_nb_products [optional] return products numbers for each
  * @return array Manufacturers
  */
public static function getManufacturers($get_nb_products = false, $id_lang = 0,    
    $active = true, $p = false,
    $n = false, $all_group = false)
{
    if (!$id_lang)
        $id_lang = (int)Configuration::get('PS_LANG_DEFAULT');

    $sql = 'SELECT m.*, ml.`description`, ml.`short_description`
        FROM `'._DB_PREFIX_.'manufacturer` m
        LEFT JOIN `'._DB_PREFIX_.'manufacturer_lang` ml ON (
            m.`id_manufacturer` = ml.`id_manufacturer`
            AND ml.`id_lang` = '.(int)$id_lang.'
        )
        '.Shop::addSqlAssociation('manufacturer', 'm');
        if ($active)
            $sql .= '
        WHERE m.`active` = 1';
        $sql .= '
        GROUP BY m.id_manufacturer
        ORDER BY m.`name` DESC'. 

        ($p ? ' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n : '');

我一直在更改以下代码;

ORDER BY m.`name` DESC'. 

以下之一,其中没有一个有效;

ORDER BY m.`name` RAND'. 
ORDER BY RAND m.`name` DESC'. 
ORDER BY m.`name` RAND() 

4 个答案:

答案 0 :(得分:2)

来自MySQL reference manual

  

您不能在ORDER BY子句中使用带有RAND()值的 ,   因为ORDER BY会多次评估该列。

例如:您可以使用ORDER BY RAND(),但不能使用ORDER BY column RAND(),如上例所示

编辑:根据以下评论进行扩展,包括重点和示例。

答案 1 :(得分:1)

你应该使用

ORDER BY RAND()

ORDER BY m.`name` DESC, RAND()

答案 2 :(得分:1)

好的,我明白了。谢谢大家指出我正确的方向。

基本上我删除了这段代码;

    $sql .= '
    GROUP BY m.id_manufacturer
    ORDER BY m.`name` DESC'. 

并将其替换为;

    $sql.= ' ORDER BY RAND()'.

答案 3 :(得分:0)

最有可能的是,您的问题出在这行代码和类似代码中:

   FROM `'._DB_PREFIX_.'manufacturer` m

你正在用反引号逃避整个表达。类似的东西:

FROM `db.manufacturer`

它指的是当前数据库中名为db.manufacturer的表。不是数据库manufacturer中的表db