2013-06-01 49 views
0

我有这样的代码:

<?php 
$data = mysql_query("SELECT id FROM board") or die(mysql_error()); 
while($info = mysql_fetch_assoc($data)) 
{ 
    Print " ".$info['id']." "; 
    myOtherQuery($info['id']); 
} 

function myOtherQuery($id) { 
    $result = mysql_query("SELECT COUNT(is_following_board_id) FROM follow WHERE is_following_board_id='$id'"); 
    $c = mysql_result($result, 0); 
} 
?> 

它列出所有ID的旁边带有数字,在所述第二查询定义为$c上方。

为了简单起见,我删除了代码的HTML,但它在表中对齐。

我想ORDER BY$c,但不知道该怎么做。如果我添加$data = mysql_query("SELECT id FROM board")

它的错误:因为它被定义选择查询后$data = mysql_query("SELECT id FROM board ORDER BY '$c'")

请问有什么可以添加到代码的底部,使通过劳动这个命令?

+0

$ c表示归因于指示流行度的id的分数。我正在尝试通过受欢迎程度排序,就像在某项“前100名”中一样。 –

+0

'$ c'是一列吗?而且,你的代码是高度可注射的。学习如何使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)准备好的语句。 –

+0

您只能使用ORDER BY使用列名而不能使用包含表中内容的变量。 –

回答

1

你想这样做,在一个查询,通过综合这些结果:

select is_following_board_id, sum(is_following_board_id) as cnt 
from follow 
group by is_following_board_id 
order by cnt desc; 

你的方法是获取的结果,然后取数。效率不高,因为SQL是为这种类型的查询而设计的。

+0

为了简单起见,我只包含带有$ c的select。还有三个查询,代码会非常复杂,如同一条语句 –

+0

@ Seth-77。 。 。一个查询将是按排序顺序获取它们的方式。否则,您必须将数据读入数组并在应用程序中进行排序。 –