2014-02-06 76 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

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