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 に答える