【发布时间】:2013-06-11 03:45:49
【问题描述】:
我有这个代码
<?php
function Random($numchar)
{
$categories = "83 76 168 102";
$array=explode(" ",$categories);
shuffle($array);
$newstring = implode($array,",");
return substr($newstring, 0, $numchar);
}
$numbers = Random(216);
$res = str_replace(",","','",$numbers);
$cats = '\''.$res.'\'';
$news = mysql_query("SELECT
item.id AS itemid,
item.cid AS itemcid,
SUBSTRING_INDEX(item.url, '/', 3) AS itemurl,
item.title AS itemtitle,
item.top AS itemtop,
images.id AS imgid,
images.img AS imagesimg,
images.item_id AS imagesitemid,
folders.id AS foldersid,
channels.id AS channelsid,
channels.parent AS channelsparent
FROM item, images, folders, channels
WHERE
item.id = images.item_id
AND item.cid = channels.id
AND channels.parent = folders.id
AND channels.parent = '$cat'
AND FIELD(item.cid, $cats)
ORDER BY
itemtop DESC, RAND(), images.item_id DESC
LIMIT 20");
?>
每次刷新页面时,代码都会从变量 $categories 中定义的类别之一返回 20 项。我只想显示每个类别的 5 个项目。是否可以像我预期的那样使用单个查询?我想腾出空间,以便可以平等地显示所有类别的项目。
还有其他方法可以优化查询吗?
【问题讨论】:
-
为什么不是
LIMIT 5? -
5 将显示来自单个类别的 5 个项目,我必须为其他类别创建 3 个其他查询。问题是当类别变成 50 个类别时,我无法在同一页面上编写 50 个查询。
-
您也许可以通过在同一个表上使用多个连接查询来做到这一点 - 每个类别一个。