创建和优化mysql查询,php

时间:2012-10-11 12:32:37

标签: php mysql zend-framework

无法创建质量并优化mysql查询。 让我们创建一个包含值的表。

CREATE TABLE flow
(
 US1 varchar(20), 
 US2 varchar(30)
);

INSERT INTO flow
(US1, US2)
VALUES
('rasim', 'tere1'),
('rasim', 'tere2'),
('rasim', 'tere3'),
('rasim', 'tere4'),
('tere1', 'tere5'),
('tere1', 'tere6'),
('tere2', 'tere7'),
('tere3', 'tere8'),
('tere3', 'tere9'),
('tere4', 'tere10'),
('tere5', 'tere11'),
('tere5', 'tere12'),
('tere9', 'tere13'),
('tere9', 'tere14');

我想要实现的目标:

$firstUs = DB::query("SELECT US2 FROM `flow` WHERE US1='rasim'");

while($first = DB::fetch($firstUs)):

$second =(int) // select and count(US2) foreach value where US1 = $first['US2'];

$third =(int) //select and count(US2) foreach value where US1 = $second['US2'];

$four = (int) //select and count(US2) foreach value where US1 = $third['US2'];

endwhile;

$ firstUs =返回4个值(tere1,tere2,tere3,tere4)。我想让脚本计算每个值,US1的条目数。 $ second =返回2个值(tere5,tere6)。第一个php while循环时计数值为(2)。 如何创建一个好的mysql脚本,以便这可以工作,如果有很多用户指责这个页面,服务器不会崩溃,查询的速度会小得多。

谢谢

我正在努力实现金字塔计划。在哪里' rasim'是主要用户名。其中$ second,$ third和$ 4是每个级别的int用户数。 $ second将拥有金字塔第二层中所有用户的数量。

Example image how it will look like. http://silverstream.ee/img/stack.PNG

2 个答案:

答案 0 :(得分:0)

我认为它类似于:

select f2.us1, count(f2.us2)
from flow f1
inner join flow f2
f1.us2=f2.us1
where f1.us1='rasim'
group by f2.us1

我希望这就是你想要的。

答案 1 :(得分:0)

我认为这里最好的选择是将数据分成不同的表,这样你就不会让主键(US1)与同一个表中的“外键”(US2)相关。然后,您可以完成您尝试使用查询而不是多个循环。

不幸的是,我仍然不知道你到底想要完成什么,所以我不可能用你给出的东西创建一个示例场景。