質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

9000閲覧

ECサイトで検索結果ソート機能を実装する

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/04/14 05:45

編集2017/04/14 05:56

現在、ECサイトの検索機能の強化を行っています。
タイトル通り検索結果の並び替え機能を実装したいです。

PHP

1<!-- search_result.php --> 2 3<form method = "GET" action = "search_result.php"> 4<!-- ジャンル選択ボックス --> 5<select name = "genre_select" name = "genre_select" style = "height: 30px"> 6 7 <option value = "すべて">すべて</option> 8 <option value = "ビタミン">ビタミン</option> 9 <option value = "ミネラル">ミネラル</option> 10 <option value = "コスメ">コスメ</option> 11 <option value = "健康食品">健康食品</option> 12 13</select> 14 15<!-- 検索ボックス --> 16<input type = "text" name = "search_box" placeholder = "何かお探しですか?"> 17 18<!-- 検索ボタン --> 19<a href = "search_result.php" class = "search_button"> 20 <input type = "submit" name = "search_button" value = "検索"> 21</a> 22 23</form> 24 25<form method = "POST" action = "search_result.php"> 26 27<h2>検索結果</h2> 28<!-- 並び替え方法選択 --> 29<select name = "sort"> 30 <option value = "cost_up">値段の安い順</option> 31 <option value = "cost_down">値段の高い順</option> 32 <option value = "name">名前順</option> 33</select> 34 35<!-- 並び替えボタン --> 36<input type = "submit" name = "sort_button" value = "並び替える"> 37 38</form> 39 40<form method = "POST" action = "search_result.php"> 41<!-- 検索結果表示テーブル --> 42<table> 43<!-- テーブルヘッダー --> 44<thead><tr> 45 <th></th> 46 <th>商品名</th> 47 <th>値段</th> 48 <th>売り文句</th> 49</tr></thead> 50 51<?php 52 53require_once 'datebase_connect.php'; //データベース接続 54 55if(isset($_POST['sort_button'])){ 56 $_SESSION['sort'] = 'sort'; 57 if($_POST['sort'] == 'cost_up'){ 58 $sql = "SELECT * FROM goods WHERE name LIKE '%$search_box%' and genre LIKE '%$genre_select%' ORDER BY price ASC"; 59 }elseif($_POST['sort'] == 'cost_down'){ 60 $sql = "SELECT * FROM goods WHERE name LIKE '%$search_box%' and genre LIKE '%$genre_select%' ORDER BY price DESC"; 61 }else{ 62 $sql = "SELECT * FROM goods WHERE name LIKE '%$search_box%' and genre LIKE '%$genre_select%' ORDER BY name ASC"; 63 } 64} 65 66if(!isset($_SESSION['sort'])){ 67 $sql = "SELECT * FROM goods WHERE name LIKE '%$search_box%' and genre LIKE '%$genre_select%' "; 68} 69 70$result = $mysqli -> query($sql); 71 72 73if(!$result) { 74echo $mysqli->error; 75 exit(); 76 } 77 78 //連想配列で取得 79 while($row = $result->fetch_array(MYSQLI_ASSOC)){ 80 $rows[] = $row; 81 } 82 83 //結果セットを解放 84 $result->free(); 85 86 // データベース切断 87 $mysqli->close(); 88 $i = 0; 89 foreach($rows as $row){ 90 91 // 画像ファイル読み込み 92 $image_disp = '<img src = "./image/'.$row['file'].'" width="100px" height="100px">'; 93 94 $i ++ ; 95 ?> 96 97 98 99 <tbody> 100 <tr align = "center"> 101 <td style = "width: 10%"><?php echo $image_disp; ?></td> 102 <td style = "width: 20%"><a href="goods_detail.php?code=<?php echo(htmlspecialchars( $row['id'] ) ); ?>"><?php echo htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8'); ?></a></td> 103 <td style = "width: 8%"><?php echo htmlspecialchars($row['price'],ENT_QUOTES,'UTF-8'); echo '円';?></td> 104 <td style = "width: 50%"><?php echo htmlspecialchars($row['catchphrase'],ENT_QUOTES,'UTF-8'); ?></td> 105 106 <input name = "goods_code" type = "hidden" value = "<?php echo $i; ?>"> 107 108 </tr> 109 </tbody> 110 111 <?php 112 if(isset($_SESSION['sort'])){ 113 session_destroy(); 114 unset($_SESSION['sort']);} 115 } ?> 116 117 </table></center> 118 119 </form></div>

このようなコードを使ったとき、検索結果のみを並び替えしたいのですが、
データベースに登録されている商品全体が並び変わってしまいます。
読みにくいソースで申し訳ございませんが、
修正案のアドバイスよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まず検索用のformとソート用のformと2つあるので、検索条件がソート用のformに適用されていないのが原因ではないでしょうか。
単純にformをひとつにしてみましょう。
以下の2行を削除。

PHP

12</form> 3 4<form method = "POST" action = "search_result.php"> 5

SQL文の組み立てですが、検索時でもソート時でも基本使うSQLは同じで、ソート条件のみ付加するようにすればよいと思います。
ソート条件はセッションに格納しておき、検索時はその条件を使うようにします。
(と仮にそうしてみました。検索時の仕様が選択中のソート条件を継続しないのであれば、修正する必要があります)

PHP

1if(isset($_POST['sort_button'])){ 2 if($_POST['sort'] == 'cost_up'){ 3 $sort = "ORDER BY price ASC"; 4 }elseif($_POST['sort'] == 'cost_down'){ 5 $sort = "ORDER BY price DESC"; 6 }else{ 7 $sort = "ORDER BY name ASC"; 8 } 9 $_SESSION['sort'] = $sort; 10} 11 12$sql = "SELECT * FROM goods WHERE name LIKE '%$search_box%' and genre LIKE '%$genre_select%' " . $_SESSION['sort'];

あとはformのmethodがGETになっているのでPOSTに変更してください。
他にも直すべき箇所はあるかもしれませんが、基本的な流れはこんな感じで良いと思います。

投稿2017/04/14 07:38

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/17 07:36

回答ありがとうございます。こちらの方法でうまく実装できました。ありがとうございます。またよろしくお願いします。
guest

0

結果をjavascriptの配列で受けてテーブルに書き出すようにすれば
サブミットしないでもボタンなどをトリガーにテーブルを書き換えられると思います
そうでない場合はajaxで都度テーブルの部分だけサーバーからデータを貰うという
考え方もあります。

投稿2017/04/14 06:38

yambejp

総合スコア114806

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/17 07:36

回答ありがとうございます。一度調べて試させてもらいます。今回はSQL文の分岐で回答を下さったもう一方をベストアンサーにさせていただきました。申し訳ございません。またよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問