• 締切済み

wordpressでショートコードを利用する。

wordpressでショートコードを利用し、固定ページ内で検索したSQL結果を同じページ内に返すためにはどうすればよろしいでしょうか。 やりたいことは以下の通りです。 固定ページ内にフォームを設置し、指定されたキーワードをPOSTして同一ページ内で渡し、 そのPOSTされたデータをSQLに付加してデータベース内を検索します。 /** 検索フォームを設置する。 * */ print "<form action=\"http://www.abcd.com/?page_id=22\" method=\"post\">"; //同一ページ内に返すためにはパーマリンクを使うとの情報があったのでパーマリンクの値を直接しています。 print "<input type=\"text\" name=\"search\">"; print "<input type=\"submit\" value=\"検索\">"; print "</form>"; /** * 検索フォームに検索ワードが指定されている場合は、LIKE検索する。 */ if ( isset( $_POST['search'] ) ) { $search = $_POST['search']; $search = "'%{".$search."}%'"; $sql = $pdo->query("SELECT a,b,c,d FROM table WHERE (concat(a,b,c,d) LIKE :search"); $data = pager_search($sql); } else { $sql = $pdo->query("SELECT a,b,c,d FROM table"); $data = pager_search($sql); } データベースを検索した結果は、$sqlに格納されpager_search()関数に渡されます。 しかし、 Fatal error: Call to a member function fetchAll() on a non-object in /var/www/html/wp-content/themes/kotetsu/functions.php on line 332 検索結果が空白のようで、pager_search()内のfetchall()でエラーとなります。 なお、SELECT a,b,c,d FROM table WHERE (concat(a,b,c,d) LIKE %{ISBN}%; としてデータベース内で直接SQL文を発行すると正常に検索結果が表示されます。 $sqlに空白ではなく、検索結果を格納するためにはほかにどのような処理が必要になるのでしょうか。 お力添えを頂けますと幸いでございます。 よろしくお願い申し上げます。

  • PHP
  • 回答数4
  • ありがとう数0

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

あぁ、そうか。pear::pagerを使っているんですね。最初から(入力したフォームから)POSTでなくGETにしたらどうなりますか?pear::pagerが自分のURLにページ指定を追加する(すでにQueryStringがあったらそれを残す)という前提ですが(ページ制御にpear::pagerを使ったことがないのでちょっと自信なしです)。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>(ページャーリンクをクリックすると、POSTデータが空と判断されてしまう) 当然です。anchor要素で遷移するのですから、POSTデータはありません。普通はanchor要素を生成するときに(指定するページ数とともに)QueyStringで引き渡します。もちろん「検索語」はurlencodeして埋め込みます。 #Googleの検索結果ページなどもそうなっていますよね

apple_v_apple
質問者

補足

ご回答いただきましてありがとうございます。 POSTデータではなく、GETメソッドに修正して動作を確認してみましたが上手く動作しません。セッションでサーバ側にPOSTデータを保存する方法も試してみましたが期待通りの結果を得られません。 大変申し訳ありませんが、pear::pagerを利用している場合のPOSTデータ引き継ぎ方法について具体的にどのように記述するべきかアドバイス頂けないでしょうか。 よろしくお願い申し上げます。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>$search = $_POST['search']; >$search = "'%{".$search."}%'"; 検索語の生成方法がちょっとヘンです。前後に % はわかりますが、何故 { や } が必要なんでしょうか? $search = filter_input(INPUT_POST, 'search'); if (isset($search)) { // POSTデータあり $search = trim($search); if ($search === '') { // 検索語が空白 $sql = $pdo->query('SELECT a,b,c,d FROM table'); } else { // 検索語あり(addcslashesで "_", "%", "\" をエスケープする) $search = '%' . addcslashes($search, '\\_%') . '%'; $sql = $pdo->prepare('SELECT a,b,c,d FROM table WHERE (concat(a,b,c,d)) LIKE :search'); $sql->execute(array(':search' => $search)); } } else { // POSTデータなし die('illegal access'); } のようにしてみては如何でしょうか

apple_v_apple
質問者

補足

> 検索語の生成方法がちょっとヘンです。前後に % はわかりますが、何故 { や } が必要なんでしょうか? またまた訂正頂きありがとうございます。データベースのクエリ検索結果を上手く取得できなかったことから、 Web上を検索すると {} を付ける必要がある。と書かれた記事を見つけたことが理由です。 試しはしたものの、データベースで実際にSQLを発行しても検索結果は表示されなかったため、 外す必要があったことは認識しております。試験時の残骸です。 また、filter_input()やaddcslashes()などを駆使した記述の仕方までご丁寧にお教え下さりありがとうございます。 お陰様で、期待した通りの結果を取得することができました。 本来は、新スレッドを立てるべきですが、新たに以下のような問題に出くわしております。 検索語が空白の場合は、 $sql = $pdo->query('SELECT a,b,c,d FROM table'); で全てのテーブル内情報を表示するクエリとなりますが、検索語にデータがあった場合、それをLIKE検索するクエリを pager_search関数渡し、その時にヒットしたデータ分はページャーリンクとともに表示されるとこまでは期待通りです。 しかし、「次へ >>」や次ページのリンクをクリックすると、$sql = $pdo->query('SELECT a,b,c,d FROM table'); で前回の検索結果が上書きされてしまうのか、 あいまい検索した検索結果は、実質最初のページしか表示されない事象になってしまっております。 (ページャーリンクをクリックすると、POSTデータが空と判断されてしまう) セッション維持などを利用すればいいのかな?と考えましたが、この部分についてもアドバイス頂けると幸いでございます。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>検索結果が空白のようで、 いいえ「結果がない」のではなく「queryに失敗」しています。 $sql = $pdo->query("SELECT a,b,c,d FROM table WHERE (concat(a,b,c,d) LIKE :search"); 作成した$search が使われていませんね。プレースホルダ(:search)を使うなら、prepare/executeでやるべきでは? $sql = $pdo->prepare("SELECT a,b,c,d FROM table WHERE (concat(a,b,c,d) LIKE :search"); $sql->execute(array($search)); #あとのpager_searchがどういう関数かわからないのでアレですが(汗

apple_v_apple
質問者

補足

プレースホルダとprepare/executeの利用についてアドバイス頂きありがとうございます。 内容を投稿頂いたものに修正してみたところ、 PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined 上記のようなエラーが出てしまったため、 $search = $_POST['search']; $search = "'%{".$search."}%'"; $sql = $pdo->prepare('SELECT a,b,c,d FROM table WHERE (concat(a,b,c,d)) LIKE :search'); $sql->execute(array(':search' => $search)); に変更致しました。しかし、 fetchall()エラーでクエリーの失敗はなくなったものの、まだデータベース内をうまく検索できていないように見えます。 search_pager()関数内で、 /** * SQLを実行する。 */ print_r($sql); $list = $sql->fetchAll(PDO::FETCH_ASSOC); /** * データ数を取得する。 */ $total = count($list); print_r($total); それぞれprint_r()で結果を表示してみますと、プレースホルダのままのSQL文が表示され、 そのSQL文のまま実行された結果トータルデータ数は0として表示されてしまいます。 SQLインジェクション対策から、SQL文を表示する場合はプレースホルダとして表示されるのは 正解で内部的にPOSTしたデータと置き換わっているということであれば、 他に原因があるのかもしれません。 ちなみに、POSTは成功しており、$searchをprintしてもPOSTされたデータとともに、 プレースホルダに置き換わる期待通りの値が格納されております。 他に何か原因はございますでしょうか。 ご参考までに、以下はsearch_pager関数です。 /** * ページャー関数を定義する。 */ function pager_search ($sql) { /** * PEARのPagerライブラリを読み込みする。 */ require_once("Pager/Pager.php"); /** * 1ページあたりに表示するデータ数を定義する。 */ $pagelength = "50"; /** * データを格納する配列を用意する。 */ $data_array = array(); /** * SQLを実行する。 */ print_r($sql); $list = $sql->fetchAll(PDO::FETCH_ASSOC); /** * データ数を取得する。 */ $total = count($list); print_r($total); /** * ページャーライブラリに渡すパラメーターを設定する。 */ $page = array( 'itemData' => $list, //アイテムの配列 'totalItems' => $total, //合計アイテム数 'perPage' => $pagelength, //1ページあたりの表示数 'mode' => 'Jumping', 'linkClass' => 'list', 'curPageLinkClassName' => 'list', 'altPrev' => '', //前のalt 'prevImg' => '&lt;&lt; 前へ', //前へ の文字表示 'altNext' => '', //次へ のalt 'nextImg' => '次へ &gt;&gt;', //次へ の文字表示 'separator' => ' | ', //数字と数字の間の文字 'append' => 1, 'urlVar' => 'page', //get属性 ); /** * Pagerに設定した項目を読み込ませる。 */ $pager = Pager::factory($page); /** * 現在のページ配列(戻り値)を取得する。 */ $data_array['data'] = $pager->getPageData(); $navi = $pager->getLinks(); print '<div class="pager">'; print $navi['all']; print '</div>'; /** * ページ遷移のリンクリストを取得する。 */ $data_array['links'] = $pager->links; $data_array['total'] = $pager->numItems(); /** * データ配列を返す。 */ return $data_array; }

関連するQ&A

  • PEARのPagerの設定の仕方

    初心者です。 ホームページでDBを利用しているのですが、データ量が多くなるのでページ送り機能をつけたいのでどうすればいいか探していたところ、PEARのPagerを使えばできるとわかりました。 しかしどうもうまくいきません。 Pagerのフォルダもきちんとアップロードしてやってみたのですがうまくいきません。 やりたいのは登録数300件のデータベースの検索結果で、10件ごとにページ送りします。ページ送りは検索結果の最下部におきたいです。 以下のソースのどこに加えればいいか教えていただけないでしょうか。 何度も試してみたんですが、ページ送りしてくれないのです。 よろしくお願いいたします。 <?php extract($_POST); 検索項目のフォーム×3 if($sig=="kb"){ mysql_connect('ほにゃらら','データベース名','パスワード'); mysql_select_db('データベース名'); 検索区分 //クエリの作成 $sql = "select * from データベースの項目 where "; if($wxxx<>""){ 省略 } //本検索 $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ print "検索結果なし"; exit; } else { echo "<b>", $rows, "</b>件HITしました<br />\n"; while($row = mysql_fetch_array($result)){ print("<table>"); print("<tr><td scope='row' rowspan='3'>".$row[""]."</font></td><td>タイトル</td>"); print("<td>".$row["title"]."</td></tr>"); print("<tr><td>項目A<td><td>".$row["koumokua"]."</td></tr>"); print("<tr><td>項目B</td><td>".$row["koumokub"]."</td></tr>"); print("</table>");} } } ?>

    • 締切済み
    • PHP
  • WordPressのLightningを利用して

    初めてホームページを作ろうと思いますが、超初心者です。 imac(10.13)まず「Local」をインストールし登録 次にWordPressログインし、 Lightningとテンプレートダウンロードして 作ろうと思います。 トップページ(Aとします) Aの内容には ・「自己紹介」をクリックすると新規で自己紹介ページが出る(Bとします) ・「実績」をクリックすると新規で実績ページが出る(Cとします) ・「お問合せ」をクリックすると新規でお問合せページが出る(Dとします) このような場合、 ・Aページのhtmlやcssや画像をどこにどういう状態に置くのでしょうか? ・Bページのhtmlやcssや画像をどこにどういう状態に置くのでしょうか? ・Cページのhtmlやcssや画像をどこにどういう状態に置くのでしょうか? ・Dページのhtmlやcssや画像をどこにどういう状態に置くのでしょうか? ちなみにダウンロードした Lightningのフォルダは下記の感じで、なにがなんだか全くわかりません・・・・。 ・app  >public ・conf  >mysql  >nginx  >php ・logs  >nginx  >php フォルダの意味も知りたいけどわかりません どこかにフォルダの説明とかあると嬉しい とりあえず、A、B、C、Dの文字要素と画像をどこのフォルダに入れるか教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • Mac
  • Pagerを使って、mysqlからデータを取り出して、分割表示を行ない

    Pagerを使って、mysqlからデータを取り出して、分割表示を行ないたい。 <?php require_once("MYDB.php"); $conn = db_connect(); //検索 start// $search_key=""; if(isset($_POST['search_key'])) $search_key = addslashes($_POST['search_key']); $sql=<<<EOS SELECT * FROM inscription WHERE site like '%$search_key%' OR url like '%$search_key%' OR fix like '%$search_key%' OR ex like '%$search_key%' EOS; if(preg_match("/Windows/",$_ENV["OS"])){ $sql=mb_convert_encoding($sql, "SJIS","EUC-JP"); } $result=$conn->query($sql); if(DB::isError($result)){ die($result->getMessage()); } $count = $result->numRows(); //検索 end// //☆☆ここにPearのPager☆☆導入// if($count>0){ ?> <table border="1" cellspacing="0" cellpadding="10"> <tr> <td width="530"><font size="2px">サイト名</font></td> </tr> <?php while($rs=$result->fetchRow( DB_FETCHMODE_ASSOC )){ if(preg_match("/Windows/", $_ENV["OS"])){ $rs['site']=mb_convert_encoding($rs['site'],"EUC-JP","SJIS"); $rs['url']=mb_convert_encoding($rs['url'],"EUC-JP","SJIS"); $rs['ex']=mb_convert_encoding($rs['ex'],"EUC-JP","SJIS"); $rs['fix']=mb_convert_encoding($rs['fix'],"EUC-JP","SJIS"); } ?> <tr><td width="530"><font size="2px"><a href="<?php echo $rs['url']?>" target="blank"><?php echo $rs['site']?></a></font></td></tr> <?php } ?> </table> <?php } $result->free(); $conn->disconnect(); ?> --------------------------------------------------------- 上のプログラムは、リスト表示するデータです。 上の☆☆ここにPearのPager導入☆☆の所に以下の内容を入れて、1ページ20行程度のリストとして分割表示を行ないたいと思っています。 <?php //Pager start// require_once("Pager/Pager.php"); $options = array( "totalItems" => 265, "delta" => 10, "perPage" => 20, ); $pager =& Pager::factory($options); $navi = $pager -> getLinks(); print($navi["all"]); $currentPageID = $pager -> getCurrentPageID(); //Pager end // ?> ただ単に導入しただけでは、 「1 2 3 4 5 6 7 8 9 10 Next >> 」と表示されるだけです。 どうすれば、分割表示できるようになるのでしょうか。 PHPに関しては、まったく知識がなく1,2冊程度の本を買って勉強した程度のレベルです。 正しい書き方等があればよろしくお願いいたします。

    • 締切済み
    • PHP
  • MySQLからのデータを「Pager」を使って分割表示する

    はじめまして。PHPとMySQLとPEARのPagerを使った質問なのですが、過去レス等を参考にしながらやってみました。 「form.html」から社員の年齢の最低と最高を入力し、それを「search.php」にgetで渡し、ヒットしたデータの名前と年齢を表示したいのです。 データが多いのでページを1ページに何件かずつ分けて表示したいのですが、「Pager」を使ったやりかたを以下のように書いてみました。 どうしても「Pager」を使ってやってみたいのですが、うまくいきません。 MySQL には(id ,name ,age の3カラムのデータが格納されています) form.html---------------------------------- <html> <head> <title>社員の名前と年齢について</title> </head> <body> <form method="get" action="search.php"> <input type="text" name="age_min"> 歳 ~ <input type="text" name="age_max" > 歳 <input type="submit" name="submit" value="検索"> </form> </body> </html> ---------------------------------------------- search.php--------------------------------------- <html> <head> <title>社員の名前と年齢について</title> </head> <body> <? //ここから http://oshiete1.goo.ne.jp/qa4155006.htmlを参考 $search=""; $age_min=$_REQUEST["age_min"]; $age_max=$_REQUEST["age_max"]; if(is_numeric($age_min) and is_numeric($age_max)) $search.=($search==""?"":"&")."age_min={$age_min}&age_max={$age_max}"; //ここまで http://oshiete1.goo.ne.jp/qa4155006.htmlを参考 //DB接続 require_once ('Pager/Pager.php'); $conn = mysql_connect ("サーバー名", "ユーザー名", "パスワード") or die ('接続できませんでした'); mysql_select_db ("search",$conn); //MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); $sql_1= mysql_query("select count(*) as max from search where age between '$age_min' and '$age_max'"); $row1 = mysql_fetch_array($sql_1); if($row1[max] == 0) $message = "該当者なし"; else $message = $row1["max"] . "人ヒット"; $row1_max = $row1["max"]; echo "検索結果<br>"; echo "$message"; $sql_2= mysql_query("select name,age from search where age between '$age_min' and '$age_max'"); $row2 = mysql_fetch_array($sql_2); //Pagerの導入 $params = array( 'itemData' => $row2, 'mode' => 'Jumping', 'perPage' => 10, 'delta' => 6, 'totalItems' => $row1_max ); //Pagerのインスタンスを生成 $pager = & Pager::factory($params); $links = $pager->getLinks(); $data = $pager->getPageData(); $c_pager = $pager->getCurrentPageID(); $e_pager= $pager->numPages(); print $data["all"]; print $links["all"]; ?> </body> </html> ------------------------------------------------------------------- ページ分割しなければ、「Pager」を使わずに、上のデータ表示箇所を while($row2 = mysql_fetch_array($sql_2)){ echo "<table border='1' cellpadding='0' cellspacing='0'>"; echo "<tr>"; echo "<td>".$row2["name"]."</td>"; echo "<td>".$row2['age']."</td>"; echo "</tr>"; echo "</table>"; } みたいな感じで書き換えればうまく表示されるのですが、「Pager」を使う場合は $data = $pager->getPageData(); でページのデータを返してくれると書いてあったもので、使ってみました。おそらく、 (1)'itemData' => $row2, (2)$data = $pager->getPageData(); (3)print $data["all"]; の3箇所あたりがおかしいかと思っております。どうかよろしくお願いします。

    • 締切済み
    • PHP
  • Wordpressの検索結果を静的表示したいのです

    Wordpressでサイトを作り「wp custom fields search」というプラグインを入れてサイト内検索をしています。 その検索結果が http://chitose.asia/?search-class=DB_CustomSearch_Widget-db_customsearch_widget&widget_number=preset-default&cs-cat-0=%E6%AD%AF%E5%8C%BB%E8%80%85 となっています。これを http://chitose.asia/%E6%AD%AF%E5%8C%BB%E8%80%85 にしたいのです。また http://chitose.asia/?search-class=DB_CustomSearch_Widget-db_customsearch_widget&widget_number=preset-2&cs-cat-0=%E6%AD%AF%E5%8C%BB%E8%80%85&cs-city-1=%E5%8D%83%E6%AD%B3&cs-all-2=%E3%83%9D%E3%82%B9%E3%82%BF%E3%83%BC%E8%A8%AD%E7%BD%AE%E5%BA%97%E3%83%AA%E3%82%B9%E3%83%88&search=%E6%A4%9C%E7%B4%A2 のように複数のキーワードを使ったりもしていますので、 http://chitose.asia/%E6%AD%AF%E5%8C%BB%E8%80%85/%E5%8D%83%E6%AD%B3/%E3%83%9D%E3%82%B9%E3%82%BF%E3%83%BC%E8%A8%AD%E7%BD%AE%E5%BA%97%E3%83%AA%E3%82%B9%E3%83%88/%E6%A4%9C%E7%B4%A2 に出来たらと思っています。 自分で調べてみたところ「.htaccess」というものを使えばいいのではないか?ということがわかり(.htaccessの知識は全くありません) http://detail.chiebukuro.yahoo.co.jp/qa/question … のサイトに書かれているようにやってみました。 しかし、色々な問題が起きてしまいました。 (1)自分のwordpressにFTPでアクセスしてみると、先頭とwpというフォルダの中に.htaccessファイルが1つずつあり、どっちをいじっていいかわからない。 (2)試しに上記の知恵袋のコードを参照して.htaccessを書き換えてみたところ検索結果には何も起きない。 (3)代わりにwordpressのログインページにアクセスできなくなりました(.htaccessをなおしたら元に戻りました) このようなことが起きて検索の動的なサイトを静的なサイトに変換できずに困っています。 知りたいことをまとめてみました。 (1)2つのうちどちらの.htaccessをいじればいいのか? (2)wp custom fields searchを使った検索結果の動的なサイトを静的なサイトに変換するにはどのように.htaccessを書き換えればいいのか?(書き換えに成功したとしてもログインページにアクセスできなくなるのはナシです。) (3).htaccessを書き換えることなくもっと簡単な方法はないか?(WPのプラグインなど) です。何か説明に不備があれば聞いてください。わかる範囲であれば全てお答えします。

  • selectを利用して1つだけ表示したいのですが

    はじめましてphp初心者です 計算をしたphp3つのデーターを計算し、 html側からのserect選択で1つだけ答えをphp側に表示させたいのですが うまくprint表示してくれません 以下の内容で行っております HTML側 <form action="http://localhost/test/**/**.php" method="post"> <select name="d" size=1> <option value = "d1">データー1の答え</option> <option value = "d2">データー2の答え</option> <option value = "d3">データー3の答え</option> <option value = "d4">データー4の答え</option> </select> <input type = "submit" value = "表示"> php側 <?php $a = 5; $b = 2; $c = 4; $d = $_POST["d"] ?> <?php //値を取得 $a = $a; $b = $b; $c = $c; $d = $_POST['d']; //セレクトボックスによって処理を変える switch ($d) { case "d1": $answer = $a + $b - $c; break; case "d2": $answer = $a + $b + $c; break; case "d3": $answer = $a - $b - $c; break; case "d4": $answer = $a - $b + $c; break; default: break; } //計算結果を表示 //print ($a." ".$b." ".$c.".$answer."\n"); ?> 計算を表示の部分でおかしくなっていると思うのですが、 根本的に間違えている可能性もあります。 数日悩んでしまい、頭がこんがらがって何が間違っているのかすら 分からなくなってしまっています。 どなたかご教示ねがいませんでしょうか?

    • 締切済み
    • PHP
  • GROUP_CONCAT✕複数列で、違うレコード数

    MySQLで、「GROUP_CONCAT」を「複数列」に適用させ、それぞれ異なるレコードを1つにまとめようとしたのですが、 取得出来る結果が、多い方の数に引き連られてしまいます。 ざっくりとした質問でアレなのですが、これは結合の仕方が悪い、 と推測されるでしょうか? そもそも「GROUP_CONCAT」を複数列に適用させる場合、それぞれ異なるレコード数をまとまることはできるのでしょうか?。 ■期待した取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows [テーブルBカラムf] => man ■実際の取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows,windows [テーブルBカラムf] => man,man 「テーブルB」の取得結果が、「テーブルA」取得結果数に引き連られてしまいます ■SQL(抜粋) SELECT  GROUP_CONCAT(a.c) AS c,  GROUP_CONCAT(a.d) AS d,  GROUP_CONCAT(b.e) AS e,  GROUP_CONCAT(b.f) AS f FROM hoge h LEFT JOIN テーブルA a ON (h.id = a.hoge_id) LEFT JOIN テーブルB b ON (h.id = b.hoge_id)

  • selectを利用して計算を一つだけ表示したい

    はじめましてphp初心者です 計算をしたphp3つのデーターを計算し、 html側からのserect選択し1つだけ答えをphp側に表示させたいのですが うまくprint表示してくれません 以下の内容で行っております HTML側 <form action="​http://localhost/test/**/**.php"​ method="post"> <select name="d" size=1> <option value = "d1">データー1の答え</option> <option value = "d2">データー2の答え</option> <option value = "d3">データー3の答え</option> <option value = "d4">データー4の答え</option> </select> <input type = "submit" value = "表示"> php側 <?php $a = 5; $b = 2; $c = 4; $d = $_POST["d"] ?> <?php //値を取得 $a = $a; $b = $b; $c = $c; $d = $_POST['d']; //セレクトボックスによって処理を変える switch ($d) { case "d1": $answer = $a + $b - $c; break; case "d2": $answer = $a + $b + $c; break; case "d3": $answer = $a - $b - $c; break; case "d4": $answer = $a - $b + $c; break; default: break; } //計算結果を表示 //print ($a." ".$b." ".$c.".$answer."\n"); ?> 計算を表示の部分でおかしくなっていると思うのですが、 根本的に間違えている可能性もあります。 数日悩んでしまい、頭がこんがらがって何が間違っているのかすら 分からなくなってしまっています。 どなたかご教示ねがいませんでしょうか?

  • 片方のテーブルに無いデータを削除したい

    過去ログを探っていろいろ試したのですが、うまくいかないので 教えてください。 TABLE1 に存在しない TABLE2 のデータをDELETEしたいのですが TABLE2 の対象年月(item2の内容)が、指定年月以上の条件で DELETEしたいのです。 ●指定月=2008/02 の場合 <TABLE1> key1 key1 key1 item1  item2 a   a   a   あ   2007/12 b   b   b   い   2007/12 c   c   c   う   2007/12 <TABLE2> key1 key1 key1 item1  item2 a   a   a   あ   2007/12 b   b   b   い   2007/12 c   c   c   う   2007/12 d   d   d   え   2008/01 (削除しない) e   e   e   お   2008/03 (削除対象) <DELETE結果 TABLE2> key1 key1 key1 item1  item2 a   a   a   あ   2007/12 b   b   b   い   2007/12 c   c   c   う   2007/12 d   d   d   え   2008/01 よろしくお願いします。 (環境:SQL Server2005 Standard)

  • サブクエリを利用したSQL文から複数の抽出条件

    例えば、以下のようなサブクエリを利用したSQL文があります。 SELECT table_a.* FROM table_a LEFT JOIN (SELECT table_b.* FROM table_b LEFT JOIN table_c ON (table_b.id = table_c.bid) WHERE table_b.type='1') AS tbl ON (table_a.id = tbl.aid) このSQL文にWHERE句で条件を指定したいのですが、サブクエリで指定しているtblテーブルのvalueフィールドが「1」と「20」のものを抽出したいと思います。 WHERE (tbl.value='1' AND tbl.value='20') としても結果が帰って来ません。 これは、WHEREする条件の数だけ、サブクエリでテーブルを作って条件を指定するのでしょうか? 効率が悪そうなので、他の方法があるのではと思いご質問させて頂きました。 お分かりになる方がいれば、よろしくお願いします。