子查询按顺序排列

时间:2013-04-06 06:02:38

标签: php mysql

我正在尝试通过子查询(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";

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

如何通过q​​cat表获取行顺序?

2 个答案:

答案 0 :(得分:0)

  1. 在子查询中,您不需要GROUP BY子句 - 这用于聚合函数
  2. 你也不需要在子查询中使用ORDER BY - 让mysql为in位进行操作
  3. 为整个查询添加ORDER BY。即最后
  4. 所以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";
    

    我也认为您可以首先避免子查询。但这需要对表格进行一些思考和更多的了解。

    BTW - 注意SQL注入的可能性

答案 1 :(得分:-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 Injection的攻击!