Click the "strip'slashes'" link to see the page I'm referring to
正如您所看到的,我为不同的短语定义设置了这个投票系统。在数据库中,投票在他们自己的表格中处理,但是通过ID链接到“短语”表。我想按照投票的余额来订购这些短语,但由于投票不是我在SQL查询中选择的表格的一部分,我不知道该怎么做。
我能够创建投票的平衡,这可以在每个短语定义下面看到,但我无法弄清楚如何按顺序排序。我考虑创建“余额”,然后在注册新投票时将其更新到数据库中,但由于插入投票进入“投票”表,我在回忆短语时无法回想起它。
请有人指出我正确的方向!
代码:
$query="select id, date, original, inotherwords, author from phrases where original='".$head."'";
$result=mysql_query($query);
$thenumber = 1;
echo '<h2>Original Phrase</h2>';
echo '<p>'.stripslashes($head).'</p><br>';
echo '<h2>In Other Words</h2>';
while($row = mysql_fetch_array($result)){
$pv = $pulse->countUpVotes($row['id']);
$nv = $pulse->countDownVotes($row['id']);
$balance = ($pv - $nv);
echo '<p>'.$thenumber.'. '.stripslashes(nl2br($row['inotherwords'])).' - ';
echo $pulse->voteHTML($row['id']);
echo '</p>';
echo '<p><b>Author</b> - '.stripslashes($row['author']).' - submitted on '.$row['date'].'</p>';
echo 'Balance - '.$balance.'<br><br>';
$thenumber++;
}
答案 0 :(得分:1)
首先,您的数据似乎太麻烦了......您是否一直在使用magic_quotes
开启,您甚至用数据库中的斜杠保存数据?如果是,请清除数据库中的所有斜杠,禁用magic_quotes
并了解sql injection以及如何保护自己免受攻击。如果你不知道我到底在说什么,那么不要做任何事,但总是用stripslashes(...)
第二......我认为每个短语的投票都计入同一数据库中的另一个表,对吧?如果是这样,您需要加入查询中的两个表,以便您能够按投票表中的数据进行排序
SELECT p.*, v.upvotes, v.downvotes, (v.upvotes - v.downvotes) as balance
FROM phrases p
LEFT JOIN votes v ON p.id = v.phrase_id
WHERE ...
ORDER BY balance DESC
答案 1 :(得分:0)
我不是百分百肯定我理解这个问题......但我想你想做的是JOIN
。
例如:
SELECT p.id, p.date, p.original, p.inotherwords, p.author, v.vote
FROM phrases p
LEFT JOIN votes v ON v.id_phrase = p.id
WHERE original = ...
ORDER BY v.vote DESC
答案 2 :(得分:0)
使用连接进行查询以获得所需的结果集。它会比循环遍历php中的所有“短语”记录要好得多。
SELECT
p.id, p.date, p.original, p.inotherwords, p.author
FROM
phrases p
LEFT JOIN
votes v on (v.id_phrase = p.id)
WHERE
original='".$head."'"
ORDER BY
v.vote DESC
(UNTESTED)