dポイントプレゼントキャンペーン実施中!

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";

上記を入れても、並び替えされません。
いろいろ調べて試しているのですが、かなりお手上げ状態になっています。
初歩のことかもしれないのですが、よろしくお願いしいたします。
他に必要な情報などいるようでしたら、教えていただけると助かります。

A 回答 (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は詳しくないので文法はあやしげ(^-^;)
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございます。

上記プログラムを試してみたのですが、全てのデータが表示されてしまいました…
やはりプログラム構造から見直しかと思います。
そのときは、上記プログラムを参考にさせていただきます。

お礼日時:2007/01/15 23:24

バッククォートやシングルクォートの有無は無関係でしょう。



$sql = "SELECT * FROM `M_ITEM` WHERE ITEM_CD = '$cookie[$i]' ORDER BY `ITEM_NAME` ASC";

というSQLを見ると、while文やfor文でループして、アイテム数分だけSQLを実行しているように思えますが違いますか? もしそうならば、$cookieの並び順で結果が出力されてもおかしくないです。プログラムの構造を変更する必要があります。
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございました。

バッククォートやシングルクォートの有無は無関係でしょう。
はい、関係ありませんでした…
まさしくループしています。プログラム構造から見直ししたいと思います。

お礼日時:2007/01/15 23:22

変数の部分を実際の数値にしたらどうですか?


実際にMYSQLにコマンドを打ち込んで動作確認してみてはどうでしょう。変数の部分がおかしければレコードセットが0になるはず。
あと、PHPのアプリの一部をもっと乗せるといいかもしれません。
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございます。

MYSQLにコマンドを打ち込んで動作確認してみてはどうでしょう。
ということなのですが…さすがに、そのやり方がわからず…
まだまだ勉強不足だということを痛感しております。
PHPのアプリの一部も…と思っているのですが、どこを乗せていいのかもかなり怪しいもので。
いろいろこちらを参考に勉強いたします。

お礼日時:2007/01/15 23:20

$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";
ではどうでしょうか?
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございます。
''をはずしてやってみたのですが、出来ませんでした…
他の部分との兼ね合いの問題かもしれません。
もう少しPHPを勉強しなければ、と気合入れ直しています。

「PHPで変数に格納するときは''が必要なかった」
ということを知らなかったので、参考になりました。
ありがとうございます。

お礼日時:2007/01/15 23:17

M_ITEM と ITEM_NAME のシングルウォーテーションはいりますかね。


簡単なSQL文では動くのでしょうか?

この回答への補足

ご回答ありがとうございます。
シングルウォーテーションをはずしてもエラーは出ませんが、
表示の切替はされませんでした。
試しに、↓の部分を削除してみたら、並び替え出来ました。
WHERE ITEM_CD = '$cookie[$i]'
しかしデータベースに登録されているもの全てが並び替えされました。

簡単なSQL文に当てはまるか分からないのですが、
上記の2点を試してみました。

補足日時:2007/01/11 00:58
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございました。

お礼日時:2007/01/15 23:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!