2014-02-06 44 views
0

好的,所以我试图获得一个图像列表随机显示,而不是前6或最后6.这两个工作正常,如果显示它在ASC或DESC,但是,作为一旦我添加兰德,什么也没有显示,它只是认为没有图像,并显示“无图像”。我尝试过移动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() 
+1

最有可能的是,您的SQL语法错误。请编辑您的问题,在所有变量替换和操作之后包含'$ sql'的值。 –

+0

无论如何,你可能并不是真的想用rand()命令,对于有大量行的表来说,这是一个性能杀手。 – GordonM

回答

2

MySQL reference manual

您不能使用用RAND()值在ORDER BY子句, 因为ORDER BY多次将评估列。

例如:你可以使用ORDER BY RAND(),但不ORDER BY column RAND()如上面的例子所示

编辑:基于下面的评论,包括加重和扩大的例子。

+1

这个答案根本不对。在''order by'表达式中''RAND()'是完全允许的。 –

+1

是的,据我所知不是直接在一列。例如:你可以使用ORDER BY RAND(),但不能使用ORDER BY列的RAND(),如上例所示。 –

+0

ORDER BY RAND()不起作用,并导致空白网页。 :/ –

1

您应该使用

ORDER BY RAND() 

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

最有可能的,你的问题是在这行代码以及类似的:

FROM `'._DB_PREFIX_.'manufacturer` m 

您与反引号逃逸整个表达。例如:

FROM `db.manufacturer` 

这是指在当前数据库中称为db.manufacturer的表。不在数据库db中的表manufacturer

1

好的,我想通了。感谢大家指点我正确的方向。

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

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

并将其替换为;

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

太棒了!很高兴它的作品:) –