フォームでユーザ情報をセットするときに、jQueryUIの検索ダイアログを起動し、
氏名の一部を入力して検索することで検索ダイアログへ検索結果を表示し、
クリックするとフォームのテキストボックスにユーザ情報一式をセットするような部分を
作成しています。
既存のoracleデータベースでは「KANJILASTNAME」「KANJIFIRSTNAME」ように姓と名を分けてもっているので、
以下のようにwhrer句にCONCAT関数で姓と名を連結させた状態で検索をしようとしています。
mysqlで仮作成していた段階だと、concatがうまく機能して、望むような結果が得られていたのですが
(「山田太」で検索すると「山田太郎」「山田太一」などが得られる)
本番環境でoci関数で検索をすると、エラーとなります。
ociでconcatや||は使用できないのでしょうか?
補足へコードを記載します。
ociのconcatに関して何か情報がありましたらお願いします。
$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コマンドが正しく終了されていません。
ちなみに私ならこう書きますかね。迂遠ですが。
SELECT BBB.* FROM ( SELECT concat(AAA.KANJILASTNAME,AAA.KANJIFIRSTNAME) AS KANJIFULLNAME,AAA.* FROM t_sample AAA ) BBB WHERE BBB.KANJIFULLNAME LIKE "'%".$test."%'";
未確認ですみませんが
$sql="select * from (select concat(KANJILASTNAME,KANJIFIRSTNAME) aaa,* from t_sample ) bbb where aaa like '%".$test."%'";
$stid=oci_parse($conn,$sql);
というように 連結させて抽出してから 絞り込んだらいかがでしょうか?
ちなみに私ならこう書きますかね。迂遠ですが。
SELECT BBB.* FROM ( SELECT concat(AAA.KANJILASTNAME,AAA.KANJIFIRSTNAME) AS KANJIFULLNAME,AAA.* FROM t_sample AAA ) BBB WHERE BBB.KANJIFULLNAME LIKE "'%".$test."%'";
ひょっとして
SELECT concat(KANJILASTNAME,KANJIFIRSTNAME) AS KANJIFULLNAME,* FROM t_sample WHERE KANJIFULLNAME LIKE "'%".$test."%'";
で動いたりして(^^;
ご提案いただいた1つ目の方法でうまくいきました、ありがとうございました。
ひょっとして
で動いたりして(^^;
2014/09/18 02:36:01ご提案いただいた1つ目の方法でうまくいきました、ありがとうございました。
2014/09/18 08:55:02