1

我正在尝试通过子查询(qcat)表从问题顺序中获取记录。我的代码是

"SELECT *  FROM question
where survey_name='$_SESSION[ssn_sname]' AND
      qcategory IN
         ( SELECT qcategory FROM qcat
           WHERE client_name='$_SESSION[ssn_sname]'
           GROUP BY qcategory
           ORDER BY p_order
         ) AND 
      status='1' AND
      survey_name LIKE'%$sname%
LIMIT $start, $limit";

但它并没有按顺序得到结果。

如何通过 qcat 表获取行顺序?

4

2 回答 2

0
  1. 在子查询中,您不需要该GROUP BY子句 - 这用于聚合函数
  2. 您也不需要ORDER BY子查询中的 - 让 mysql 解决这个in问题
  3. ORDER BY为整个查询添加。即最后

所以SQL应该是

"SELECT *  FROM question
where survey_name='$_SESSION[ssn_sname]' AND
      qcategory IN
         ( SELECT qcategory FROM qcat
           WHERE client_name='$_SESSION[ssn_sname]'              
         ) AND 
      status='1' AND
      survey_name LIKE'%$sname%
ORDER BY p_order
LIMIT $start, $limit";

我还认为您可能首先可以避免子查询。但这需要一点思考和更多关于表格的知识。

顺便说一句 - 注意 SQL 注入的可能性

于 2013-04-06T07:40:12.783 回答
-1

您需要加入该qcat表,以便能够对该表中的不同列进行排序。试试这个:

$query = "
  SELECT q.id question_id, q.*, c.*
  FROM question q
  INNER JOIN qcat c ON c.category = q.category
  WHERE q.survey_name='$_SESSION[ssn_sname]'
    AND c.client_name = '$_SESSION[ssn_sname]'
    AND q.status='1'
    AND q.survey_name like '%$sname%'
  GROUP BY q.id
  ORDER BY c.p_order
  LIMIT $start, $limit";

注意:您的查询容易受到SQL 注入的攻击!

于 2013-04-06T06:16:28.097 回答