- ベストアンサー
コードで渡したデータを降順に並び替えて表示したい
PHPを初めて3ヶ月ほどになります。ご教授お願いします。 PHP4.3.2:MySQL 4.1.18を使用しています。 買い物カゴシステムを作成しています。 詳細ページから気になる商品をランダムに買い物カゴへ入れていきます。 現在、買い物カゴの中身を確認すると、チェックした順に表示されます。 これを、商品名ごとに50音で並び替えをしたいのです。 $sql = "SELECT * FROM `M_ITEM` WHERE ITEM_CD = '$cookie[$i]' ORDER BY `ITEM_NAME` ASC"; 上記を入れても、並び替えされません。 いろいろ調べて試しているのですが、かなりお手上げ状態になっています。 初歩のことかもしれないのですが、よろしくお願いしいたします。 他に必要な情報などいるようでしたら、教えていただけると助かります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
PHPに詳しくないので、、SQL文の部分にのみお答えします。 WHERE句が "="で比較されているということは、一致したものを取ってきているだけなので、 選択された全項目をソート順にしたければ、 WHERE句の部分を ITEM_CD = '~' ではなく ITEM_CD IN ('~', '~', ..., '~') のように、しなくてはいけません。 $sqlwhere = "ITEM_CD IN("; for ($i = 1; $i <= xx; $i++) { if($i != 1){ $sqlwhere = $sqlwhere + ","; } $sqlwhere = $sqlwhere + "'" + $cookee[$i] + "'"; } $sqlwhere = $sqlwhere + ")"; $sql = "SELECT * FROM 'M_ITEM' WHERE " + $sqlwhere + " ORDER BY 'ITEM_NAME' ASC"; こんな感じ?(PHPは詳しくないので文法はあやしげ(^-^;)
その他の回答 (4)
- fdsjaklfjas
- ベストアンサー率81% (96/118)
バッククォートやシングルクォートの有無は無関係でしょう。 $sql = "SELECT * FROM `M_ITEM` WHERE ITEM_CD = '$cookie[$i]' ORDER BY `ITEM_NAME` ASC"; というSQLを見ると、while文やfor文でループして、アイテム数分だけSQLを実行しているように思えますが違いますか? もしそうならば、$cookieの並び順で結果が出力されてもおかしくないです。プログラムの構造を変更する必要があります。
お礼
貴重なご意見ありがとうございました。 バッククォートやシングルクォートの有無は無関係でしょう。 はい、関係ありませんでした… まさしくループしています。プログラム構造から見直ししたいと思います。
変数の部分を実際の数値にしたらどうですか? 実際にMYSQLにコマンドを打ち込んで動作確認してみてはどうでしょう。変数の部分がおかしければレコードセットが0になるはず。 あと、PHPのアプリの一部をもっと乗せるといいかもしれません。
お礼
貴重なご意見ありがとうございます。 MYSQLにコマンドを打ち込んで動作確認してみてはどうでしょう。 ということなのですが…さすがに、そのやり方がわからず… まだまだ勉強不足だということを痛感しております。 PHPのアプリの一部も…と思っているのですが、どこを乗せていいのかもかなり怪しいもので。 いろいろこちらを参考に勉強いたします。
- Rasyuki
- ベストアンサー率57% (19/33)
$sql = "SELECT * FROM `M_ITEM` WHERE ITEM_CD = '$cookie[$i]' ORDER BY `ITEM_NAME` ASC"; PHPで変数に格納するときは''が必要なかったと思います。 なので、 $sql = "SELECT * FROM M_ITEM WHERE ITEM_CD = $cookie[$i] ORDER BY ITEM_NAME ASC"; ではどうでしょうか?
お礼
貴重なご意見ありがとうございます。 ''をはずしてやってみたのですが、出来ませんでした… 他の部分との兼ね合いの問題かもしれません。 もう少しPHPを勉強しなければ、と気合入れ直しています。 「PHPで変数に格納するときは''が必要なかった」 ということを知らなかったので、参考になりました。 ありがとうございます。
M_ITEM と ITEM_NAME のシングルウォーテーションはいりますかね。 簡単なSQL文では動くのでしょうか?
お礼
貴重なご意見ありがとうございました。
補足
ご回答ありがとうございます。 シングルウォーテーションをはずしてもエラーは出ませんが、 表示の切替はされませんでした。 試しに、↓の部分を削除してみたら、並び替え出来ました。 WHERE ITEM_CD = '$cookie[$i]' しかしデータベースに登録されているもの全てが並び替えされました。 簡単なSQL文に当てはまるか分からないのですが、 上記の2点を試してみました。
お礼
貴重なご意見ありがとうございます。 上記プログラムを試してみたのですが、全てのデータが表示されてしまいました… やはりプログラム構造から見直しかと思います。 そのときは、上記プログラムを参考にさせていただきます。