2013-06-18 39 views
2

如果您需要任何其他信息以帮助我,请让我知道。不过,该项目需要密码保护。查询不按顺序返回

我现在非常困惑,因为我在一个未完成的项目的这一部分有一段运行的代码,所以我想。我正在寻找任何有助于解决此问题的建议。

我没有得到'理智'的结果,我做了两次相同的事情,得到不同的结果。这两段代码都成功返回了所有对SAME问题的答案,但其中一个按照17,18,19,16的顺序在代码的确切代码块中显示,而第二个则显示了16,17,18,19正确的顺序。

在第二段代码中,它是给定问题和与之相关的所有答案(只是第一个代码的更详细的视图)的更详细视图的一部分,编辑功能将编辑正确的代码,但删除复选框失败并删除错误的项目。这种模式并不符合故障代码的视觉排序,而且显得很随机。这可能是相同或不同的问题,我正在研究这一点。

与两个代码部分,这些部分中的一个被显示所有的答案的问题的的数据的行如下:

$query2 = "SELECT * FROM ST_Answers 
    WHERE referencingQuestionID = '$permIDNum' 
    ORDER BY 'permanentAnsNumber'"; 
    $result2 = mysql_query($query2); 
    $ret = ""; 
    $letter = "a"; 

    $ret .= "<div class='lq answerListItem'>"; 
    $ret .= "<span class='lqh2 answerNumber'> &nbsp; </span>"; 
    $ret .= "<span class='lqh2 answerTextBody'>Answer Text Body</span>"; 
    $ret .= "<span class='lqh2 answerSummaryText'>Answer Summary Text</span>"; 
    $ret .= "<span class='lqh2 answerNextQuestion'>Next Q#</span>"; 
    $ret .= "<span class='lqh2 correct'>Correct?</span>"; 
    $ret .= "</div>"; 


    $i = 0; 
    $n = mysql_numrows($result2); 
    while($i < $n){ 
      $permAID = mysql_result($result2,$i,"permanentAnsNumber"); 
     $aText = mysql_result($result2,$i,"answerTextBody"); 
     $aSummary = mysql_result($result2,$i,"answerSummaryText"); 
     $nextQID = mysql_result($result2,$i,"nextQuestionID"); 
     $correctA = mysql_result($result2,$i,"correctAnswer"); 

     $ret .= "<div class='lq answerListItem'>"; 
     if($letter != "a") { $ret .= "<br/>"; } 
     $ret .= "<span class='lq answerNumber'> &nbsp; </span>"; 
      $ret .= "<span class='lq answerTextBody'>" . $letter . ") $aText </span>"; 
     $ret .= "<span class='lq answerSummaryText'>" . $aSummary . "</span>"; 
     $ret .= "<span class='lq answerNextQuestion'>" . $nextQID . "</span>"; 
     $ret .= "<span class='lq correct'>" . $correctA . "</span>"; 
     $letter++; 
     $ret .= "</div>"; 
     $i++; 
    } 

该第二代码段,被显示相同的数据,但多一点使用SAME查询,但不是按顺序显示项目,而是按正确顺序正确显示它们,但代码几乎完全相同!

$query2 = "SELECT * FROM ST_Answers 
    WHERE referencingQuestionID='$permID' 
    ORDER BY 'permanentAnsNumber'"; 
$result2 = mysql_query($query2); 
$ret .= "<div id='answerContainer'><h3>Associated Answers: </h3>"; 

$i = 0; 
$n = mysql_numrows($result2); 
// NOTE: This is displaying everything in correct order 
// TODO: Reference this 
while($i < $n){ 
     $permAID = mysql_result($result2,$i,"permanentAnsNumber"); 
    $aText = mysql_result($result2,$i,"answerTextBody"); 
    $aSummary = mysql_result($result2,$i,"answerSummaryText"); 
    $nextQID = mysql_result($result2,$i,"nextQuestionID"); 
    $correctA = mysql_result($result2,$i,"correctAnswer"); 

    $ret .= "<div class='answerRow'>"; 
     $ret .= "<span class='perAID'>" . "<h5>Answer ID(Warning do not change):<textarea rows='1' cols='4' name='ids[]'>" . $permAID . "</textarea></span></h5>"; 
     $ret .= "<span class='aText'>" . "Answer Text: <br /><textarea name='aTxt[]' rows='5' cols='40'>" . $aText . "</textarea></span><br />"; 
     $ret .= "<span class='aSummary'>" . "Answer Summary: <br /><textarea name='aSum[]' rows='5' cols='40'>" . $aSummary . "</textarea></span><br />"; 
     $ret .= "<span class='nextQID'>Question this leads to: <textarea name='nxtQID[]' rows='1' cols='4'>" . $nextQID . "</textarea></span><br />"; 
     $ret .= "<span class='correctA'>" . "Answer point value: <textarea name='ansCorrect[]' rows='1' cols='2'>" . $correctA . "</textarea></span><br />"; 
     $ret .= "<span class='del'><h6>Delete? <input type='checkbox' name='delete[]'></h6></span><br />"; 
    $ret .= "</div><br />"; 

    $i++; 
} 

有没有人有什么想法,甚至从哪里开始呢?我完全被难住了。

+0

'$ permIDNum'在第一个查询'$ permID'中第二个? –

+0

他们实际上是相同的价值,只是不同的名字。他们在代码的不同部分,我将转换它,所以他们很短。 –

+0

反引号(')与引号不同(') – Strawberry

回答

3

你的问题是你围绕列名使用引号。通过这种方式将一个常量字符串引入ORDER BY可以有效地消除结果集的排序。

变化

$query2 = "SELECT * FROM ST_Answers WHERE referencingQuestionID = '$permIDNum' 
      ORDER BY 'permanentAnsNumber'"; 
        ^    ^

$query2 = "SELECT * FROM ST_Answers WHERE referencingQuestionID = '$permIDNum' 
      ORDER BY permanentAnsNumber"; 

这里是SQLFiddle演示。

请注意:学习和使用prepared statementsPDOMySQLi。 Mysql_ *扩展名已被弃用。

+0

这不是,语法允许任何一种方法。除此之外,我还试过这个,以防万一,而事实并非如此。另外我知道他们被弃用,我更喜欢mysqli,只是有太多这样的代码在其他格式中,我会一次性转换它。不应该有功能差异,除非你有这样的参考。 –

+3

_“语法允许使用任何方法” - 是的,但效果完全不同。 – CBroe

+0

效果如何不同?你能解释一下吗?我总是把东西放在引号中,并且在我的测试过程中早些时候删除了引号,以查看是否导致差异并忘记替换它们。 –

0

我建议你改变你的风格,尝试而尝试使用您的查询或字符串内的PHP变量使用此

$query2 = "SELECT * FROM ST_Answers WHERE referencingQuestionID='$permID' ORDER BY permanentAnsNumber"; 
$result2 = mysql_query($query2); 
$ret .= "<div id='answerContainer'><h3>Associated Answers: </h3>"; 

while($row = mysql_fetch_assoc($result2)) { 

    $ret .= "<div class='answerRow'>"; 
     $ret .= "<span class='perAID'>" . "<h5>Answer ID(Warning do not change):<textarea rows='1' cols='4' name='ids[]'>" . $row["permanentAnsNumber"] . "</textarea></span></h5>"; 
     $ret .= "<span class='aText'>" . "Answer Text: <br /><textarea name='aTxt[]' rows='5' cols='40'>" . $row["answerTextBody"] . "</textarea></span><br />"; 
     $ret .= "<span class='aSummary'>" . "Answer Summary: <br /><textarea name='aSum[]' rows='5' cols='40'>" . $row["answerSummaryText"] . "</textarea></span><br />"; 
     $ret .= "<span class='nextQID'>Question this leads to: <textarea name='nxtQID[]' rows='1' cols='4'>" . $row["nextQuestionID"] . "</textarea></span><br />"; 
     $ret .= "<span class='correctA'>" . "Answer point value: <textarea name='ansCorrect[]' rows='1' cols='2'>" . $row["correctAnswer"] . "</textarea></span><br />"; 
     $ret .= "<span class='del'><h6>Delete? <input type='checkbox' name='delete[]'></h6></span><br />"; 
    $ret .= "</div><br />"; 

} 
+0

这与peterm最初陈述的相同的原因,我错了,与他争论:) –

+0

你说得对,我只谈论风格差异;) 使用'mysql_fetch_assoc'很舒服 –

0

使用字符串和可变拼接的方法。 'ORDERBY'后不需要引号。保重也..这种变化可能会帮助你在这里。

更改查询:

$ QUERY2 = “SELECT * FROM ST_Answers WHERE referencingQuestionID = “” $ permIDNum。“'ORDER BY permanentAnsNumber”;

0

正如Peterm所述,在'ORDER BY'说明符周围的代码中不能有引号。一旦修正了这段代码以及更高代码的父代代码,所有内容都可以正确显示。