人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpのoci関数でoracleデータベースを検索しています。

フォームでユーザ情報をセットするときに、jQueryUIの検索ダイアログを起動し、
氏名の一部を入力して検索することで検索ダイアログへ検索結果を表示し、
クリックするとフォームのテキストボックスにユーザ情報一式をセットするような部分を
作成しています。

既存のoracleデータベースでは「KANJILASTNAME」「KANJIFIRSTNAME」ように姓と名を分けてもっているので、
以下のようにwhrer句にCONCAT関数で姓と名を連結させた状態で検索をしようとしています。

mysqlで仮作成していた段階だと、concatがうまく機能して、望むような結果が得られていたのですが
(「山田太」で検索すると「山田太郎」「山田太一」などが得られる)
本番環境でoci関数で検索をすると、エラーとなります。

ociでconcatや||は使用できないのでしょうか?

補足へコードを記載します。

ociのconcatに関して何か情報がありましたらお願いします。

●質問者: kon39392
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

$sql="select * from t_sample where concat(KANJILASTNAME,KANJIFIRSTNAME) like '%".$test."%'";
$stid=oci_parse($conn,$sql);

oci_execute($stid);
while($row=oci_fetch_array($stid,OCI_ASSOC+OCI_RETURN_NULLS)){
$userlastname = $row['KANJILASTNAME'];
$userfirstname = $row['KANJIFIRSTNAME'];
$userid = $row['UID'];
}

エラー内容
oci_execute():ORA-009933:SQLコマンドが正しく終了されていません。


1 ● きゃづみぃ
●100ポイント

未確認ですみませんが

$sql="select * from (select concat(KANJILASTNAME,KANJIFIRSTNAME) aaa,* from t_sample ) bbb where aaa like '%".$test."%'";
$stid=oci_parse($conn,$sql);


というように 連結させて抽出してから 絞り込んだらいかがでしょうか?


2 ● sasada
●200ポイント ベストアンサー

ちなみに私ならこう書きますかね。迂遠ですが。

SELECT BBB.*
 FROM
 (
 SELECT concat(AAA.KANJILASTNAME,AAA.KANJIFIRSTNAME) AS KANJIFULLNAME,AAA.*
 FROM t_sample AAA
 ) BBB
 WHERE BBB.KANJIFULLNAME LIKE "'%".$test."%'";

sasadaさんのコメント
ひょっとして >|| SELECT concat(KANJILASTNAME,KANJIFIRSTNAME) AS KANJIFULLNAME,* FROM t_sample WHERE KANJIFULLNAME LIKE "'%".$test."%'"; ||< で動いたりして(^^;

kon39392さんのコメント
ご提案いただいた1つ目の方法でうまくいきました、ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ