好的,所以我试图获取一个随机显示的图像列表,而不是前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()
答案 0 :(得分:2)
您不能在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
。