由于我对php和mysql(i)脚本的速度和复杂性一无所知,我有这个问题:
我有一个包含3个表的数据库:
为了设置分页(我需要row_count,因为我想知道最后一页是什么),我想知道最好的方法是什么,或者它取决于产品的数量(50, 100,500?)。返回的结果取决于所选类别:
"SELECT * FROM `productcategories`
JOIN products ON products.proID = productcategories.proID
WHERE productcategories.catID =$category";
创意1:
创意2:
我不知道哪个是最好的。想法1似乎更快,因为您必须选择少量数据,但我不知道或所需的2个查询会影响速度?哪个是最快的:收集“大量”数据或进行查询? 如果我的想法完全走错了路,请随意纠正我。
答案 0 :(得分:2)
通常认为最佳做法是尽可能少地返回数据,因此简短的回答是使用这两个查询。 但是,MySQL确实提供了一个有趣的函数,它允许您返回在没有limit子句的情况下返回的行计数:
请记住,并非所有dbms都实现此功能,因此请小心使用。
示例:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
答案 1 :(得分:0)
使用select count(1) as count...
作为总行数。然后根据需要选择数据以分页limit 0,10
或类似的东西。
另外,对于总计数,您不需要加入products
或categories
表,因为这只会用于显示额外信息。
"SELECT count(1) as count FROM `productcategories` WHERE catID=$category";
然后是数据:
"SELECT * FROM `productcategories`
JOIN categories ON categories.catID = productcategories.catID
JOIN products ON products.proID = productcategories.proID
WHERE productcategories.catID=$category limit 0,10";
用所需的实际字段替换*会更好。