我有一个这样的数据库表:
公司
在我的ındex页面中,我有3个模块。
黄金公司(gold.php)
$db->where('gold','1');
$company = $db->get('company');
foreach ($company as $gold)
{
echo $gold['name'] ;
}
公司按日期排序(最后添加)(last.php)
$db->orderby('date','desc');
$company = $db->get('company');
foreach ($company as $date)
{
echo $date['name'] ;
}
在线公司(online.php)
$db->where('online','1');
$company = $db->get('company');
foreach ($company as $online)
{
echo $online['name'] ;
}
这是我的索引页
include ( "gold.php" );
include ( "last.php" );
include ( "online.php" );
我的问题: 一页有3个模块,一页有3个查询。为了获得最佳的mysql性能,我该如何使用这些查询?我是否只能对所有这些模块使用一个查询。
答案 0 :(得分:1)
您提出了3个不同的问题:
这是3个不同的问题。您必须在订购方面达成妥协 -
你可以问:
取出所有黄金或在线公司(WHERE gold = 1 OR online = 1)
这将按照黄金公司和在线公司(以及黄金在线公司)的自然顺序取回合并清单。
您可以解析结果,因为您输出的结果是将黄金公司分散到一个列表中,然后将其联机到另一个列表中,但是如何处理黄金在线公司 - 目前它们都列在两个列表中)
现在开始觉得有点乱。让我们以另一种方式来思考......
你已经要求取回所有公司了,请问一个问题。现在,当您解析结果时,您将黄金公司吐入黄金名单,在线公司进入在线列表以及所有公司列表中的所有公司)
唯一的区别是您的黄金和在线列表将按日期排序。这可以接受吗?
tbh,只要您的黄金和在线列被编入索引并且结果很小或被分页,这三个查询的开销应该可以忽略不计,并且可以更容易地读取代码/模块化代码。
答案 1 :(得分:0)
您可以使用此查询:
SELECT name, online, gold
FROM company
ORDER BY date
然后在你的PHP代码中循环结果(假设你的变量名称):
1.仅在$gold['gold'] == 1
时显示
没什么可改变的
1.仅在$online['online'] == 1
答案 2 :(得分:0)
如果不清楚地了解网页的人体工程学,就很难回答。
如果您预先加载所有内容(因为您需要预先安装所有内容),那么我将只使用一个查询创建对象池,因为要加载的对象数量是合理的(似乎是您的情况)
如果用户逐步加载内容,则值得在前端和后端插入一些ajax端点,这样您就可以根据需要随时检索数据。