我有一个超过5000行的表。每行都有一个类别,我想在我的程序中使用这些行。问题是每次在类内部分析这些行吗?或者每次只获得课程需要,并让每个班级决定使用哪些数据。我知道我的解释很乱,但请看这些例子。
PEOPLE
--
ID NAME CAT AGE
------------------------------------
1 Brad 5 23
2 Goy 3 19
2 Romeo 5 34
2 Deborah 5 40
.. .. ..
5000 Bob 1 56
现在我只想用cat = 5对行进行分析,每行都是一个对象。
First Solution
SELECT * FROM people Where CAT = 5
and then in php make each class analyze the all data ?
foreach($people as $p)
{
if($p['age'] == 20)
do......
}
Second solution
in each class put a function to get the data
function get_data
{
$query = 'SELECT * FROM people WHERE cat = 5 AND age = '.$this->age.'';
then do....
}
我有很多行5000这是一个例子,请帮助我并给我更有效的解决方案 第一个会打到数据库一次,但同一个数组将在每个类中循环(不好) 第二个将多次访问数据库,但会带来确实需要的数据。
答案 0 :(得分:2)
由于没有给出详细信息,答案肯定是使用SQL查询过滤数据,原因有很多。在某些情况下,当无法进行数据库级处理时(例如,当涉及更复杂的业务逻辑时),但通常您应该在进入高级代码之前尝试过滤数据。
这正是职业数据库的发明。
在您的示例中,首先收集数组中的所有年龄,然后运行以下查询:
$sql = 'SELECT * FROM people WHERE cat = 5 AND age IN (' . implode(',', $ages) . ')';
如果您正在使用MySQL,则允许的IN集大小很大(默认为32 Mb),这应该足够了。
答案 1 :(得分:0)
让SQL尽可能多地完成工作。特别是关于过滤数据等。
PS:5000行并不多,像MySQL这样的数据库可以处理每个表100k +行。
答案 2 :(得分:0)
这取决于你想做什么,真的。您想对age == 20
做什么?