//---------------------------------------------------------------------------
//- Function getRcpNo_from_Keywords()
//-
//- Keywords と Add_keywords からレシピ番号配列取得
//---------------------------------------------------------------------------
//- 引数:db_resource
//- keywords
//- &rcp_list(参照渡し)
//- type : rcp (レシピ名対象時指定) | null (default:材料検索用のみ対象)
//-
//- 戻り値:レシピ番号配列
//---------------------------------------------------------------------------
function getRcpNo_from_Keywords($db,$keywords,$rcp_list,$type = ''){
$keywords = mb_convert_kana($keywords, "KVs");
$keywords = addslashes($keywords);
$key_arr = explode(" ",$keywords);
$rcp_no_arr = array();
/*
print "
getRcpNo_from_Keywords()
Keywords Array -> ";
var_dump( $key_arr );
print "
";
*/
//-- 入力キーワードで材料検索用から検索
//- スペース区切り時はループ
for($i=0;$iquery($sql);
$sql_term = "";
$alias_arr = "";
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
if(!empty($row['mtr_alias'])){
$alias_arr[] = $row['mtr_alias'];
}
}
if(!empty($alias_arr)){
$sql_term = "";
$out_sql_term = "";
$tmp_alias_arr = "";
$out_alias_arr = "";
for($p=0;$pquery($sql);
//- 絞り込み検索用に今回のSQLを保存しておこう
$rcp_list['pre_sql']['alias'][] = $sql;
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$rcp_no_arr['alias'][] = $row['rcp_no'];
}
$wrk_rcp_no_arr = $rcp_no_arr['alias'];
}//- エイリアス存在時の処理終了
//- 入力キーワードで材料検索用から前方一致で検索
$sql = "";
$sql.= "SELECT * FROM contents_data_bsc_mtr_gnr_s ";
$sql_input_term_like = sprintf(" mtr_nm like '%s%%' ",$key_arr[$i]);
if(!empty($out_sql_term)){
$sql_input_term_like .= sprintf(" and mtr_nm not in (%s) ",$out_sql_term);
}
$sql.= sprintf(" WHERE %s and rcp_no is not null and mtr_s_dlt = 0 Group by rcp_no",$sql_input_term_like);
$res = $db->query($sql);
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$rcp_no_arr['keywords'][] = $row['rcp_no'];
}
//- alias結果配列とkeywords結果配列のマージ(or条件)
if(!empty($wrk_rcp_no_arr) && !empty($rcp_no_arr['keywords'])){
$wrk_rcp_no_arr = array_merge($wrk_rcp_no_arr,$rcp_no_arr['keywords']);
}elseif(empty($wrk_rcp_no_arr) && !empty($rcp_no_arr['keywords'])){
$wrk_rcp_no_arr = $rcp_no_arr['keywords'];
}
//- 配列値の重複を削除し、indexの飛びを直す
$tmp_wrk_rcp_no_arr = array_unique($wrk_rcp_no_arr);
$wrk_rcp_no_arr = "";
$k = 0;
foreach($tmp_wrk_rcp_no_arr as $key => $val){
$wrk_rcp_no_arr[$k] = $val;
$k++;
}
}
//--- レシピ名から検索(フラグ指定時のみ)
if('rcp' == $type ){
//- 入力キーワードでレシピ名から検索
$sql_input_term_like_all = "";
$sql = "";
$sql.= "SELECT * FROM contents_data_bsc_r_new ";
$sql_input_term_like_all = sprintf(" rcp_nm like '%%%s%%' ",$key_arr[$i]);
$sql.= sprintf(" WHERE %s ",$sql_input_term_like_all);
$res = $db->query($sql);
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$rcp_no_arr['rcp_nm'][] = $row['uniq_id'];
}
//- 絞り込み検索用に今回のSQLを保存しておこう
$rcp_list['pre_sql']['rcp_nm'][] = $sql;
//- wrk結果配列とrcp_nm結果配列のマージ(or条件)
if(!empty($wrk_rcp_no_arr) && !empty($rcp_no_arr['rcp_nm'])){
$wrk_rcp_no_arr = array_merge($wrk_rcp_no_arr,$rcp_no_arr['rcp_nm']);
}elseif(empty($wrk_rcp_no_arr) && !empty($rcp_no_arr['rcp_nm'])){
$wrk_rcp_no_arr = $rcp_no_arr['rcp_nm'];
}
//- 配列値の重複を削除し、indexの飛びを直す
$tmp_wrk_rcp_no_arr = "";
$tmp_wrk_rcp_no_arr = array_unique($wrk_rcp_no_arr);
$wrk_rcp_no_arr = "";
$k = 0;
foreach($tmp_wrk_rcp_no_arr as $key => $val){
$wrk_rcp_no_arr[$k] = $val;
$k++;
}
//- 入力キーワードでレシピ名かなから検索
$sql_input_term_like_all_kana = "";
$sql = "";
$sql.= "SELECT * FROM contents_data_bsc_r_new ";
$sql_input_term_like_all_kana = sprintf(" rcp_nm_kana like '%%%s%%' or rcp_nm_kana like '%%%s%%' ", $key_arr[$i], mb_convert_kana($key_arr[$i], 'Kc'));
$sql.= sprintf(" WHERE %s ",$sql_input_term_like_all_kana);
$res = $db->query($sql);
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$rcp_no_arr['rcp_nm_kana'][] = $row['uniq_id'];
}
//- 絞り込み検索用に今回のSQLを保存しておこう
$rcp_list['pre_sql']['rcp_nm_kana'][] = $sql;
//- wrk結果配列とrcp_nm_kana結果配列のマージ(or条件)
if(!empty($wrk_rcp_no_arr) && !empty($rcp_no_arr['rcp_nm_kana'])){
$wrk_rcp_no_arr = array_merge($wrk_rcp_no_arr,$rcp_no_arr['rcp_nm_kana']);
}elseif(empty($wrk_rcp_no_arr) && !empty($rcp_no_arr['rcp_nm_kana'])){
$wrk_rcp_no_arr = $rcp_no_arr['rcp_nm_kana'];
}
//- 配列値の重複を削除し、indexの飛びを直す
$tmp_wrk_rcp_no_arr = "";
$tmp_wrk_rcp_no_arr = array_unique($wrk_rcp_no_arr);
$wrk_rcp_no_arr = "";
$k = 0;
foreach($tmp_wrk_rcp_no_arr as $key => $val){
if(empty($val)){continue;}
$wrk_rcp_no_arr[$k] = $val;
$k++;
}
}//- レシピ名検索終了
$res_rcp_no_arr[] = $wrk_rcp_no_arr;
}//- キーワードごとの処理終了
//- 結果配列を and 条件でマージ(改修済)
if('1' < count($res_rcp_no_arr)){
$wrk_a = $res_rcp_no_arr[0];
$wrk_b = $res_rcp_no_arr[1];
}else{
$res_arr = $res_rcp_no_arr[0];
}
for($x=1;$x $val){
if(empty($val)){continue;}
$res_arr[$k] = $val;
$k++;
}
//print "
array_uniqued -> ";
//var_dump($res_arr);
return $res_arr;
}
//---------------------------------------------------------------------------
//- Function getRcpNo_from_Main()
//-
//- Main(主材料) からレシピ番号配列取得
//---------------------------------------------------------------------------
//- 引数:db_resource
//- main
//- &rcp_list(参照渡し)
//-
//- 戻り値:レシピ番号配列
//---------------------------------------------------------------------------
function getRcpNo_from_Main($db,$main,$rcp_list){
$tmp_key = "";
$rcp_no_arr = "";
$key_1 = sprintf("%d",substr($main,0,1));
$key_2 = sprintf("%d",substr($main,1,2));
$tmp_key .= sprintf(" mtr_class_1 = %s " , $key_1);
if($key_2 == '0' || !$key_2){
//$tmp_key .= " and (mtr_class_2 = 0 or mtr_class_2 is null) ";
}else{
$tmp_key .= sprintf(" and mtr_class_2 = %s " , $key_2);
}
$sql = "select * from contents_data_bsc_mtr_gnr";
$sql.= sprintf(" Where %s",$tmp_key);
$res = $db->query($sql);
$sql_terms = "";
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$tmp_term = explode("|",$row['mtr_alias']);
if(substr($tmp_term[0],-1) == ":"){
$tmp_term[0] = substr($tmp_term[0],0,-1);
}
$tmp_term[0] = sprintf("%s:%s:%s",$tmp_term[0],$row['mtr_nm'],$row['mtr_nm_kana']);
$tmp_arr[] = explode(":",$tmp_term[0]);
if(!empty($tmp_term[1])){
$not_tmp_arr[] = explode(":",$tmp_term[1]);
}
}
//- 検索対象条件を作成
if(is_array($tmp_arr)){
foreach($tmp_arr as $key => $val){
foreach($val as $veget){
if(empty($veget)){continue;}
$veget_arr[] = $veget;
}
}
$list_ing = array_unique($veget_arr);
foreach($list_ing as $val){
if(!empty($val)){
$sql_terms .= sprintf("'%s',",$val);
}
}
$sql_terms = substr($sql_terms,0,-1);
}
//- 検索非対象条件を作成
if(is_array($not_tmp_arr)){
foreach($not_tmp_arr as $key => $val){
foreach($val as $not_veget){
if(empty($not_veget)){continue;}
$not_veget_arr[] = $not_veget;
}
}
$not_list_ing = array_unique($not_veget_arr);
foreach($not_list_ing as $val){
if(!empty($val)){
$sql_terms .= sprintf("'%s',",$val);
}
}
$sql_unterms = substr($sql_unterms,0,-1);
}
//- 対象の材料が一軒もなければfalseを返して終了
if(empty($sql_terms)){return false;}
$comp = "";
$comp = substr($sql_terms,-1);
if("," == $comp){
$sql_terms = substr($sql_terms,0,-1);
}
$comp_not = "";
$comp_not = substr($sql_unterms,-1);
if("," == $comp_not){
$sql_unterms = substr($sql_unterms,0,-1);
}
if(empty($sql_terms)){return false;}
$sql = "SELECT * FROM contents_data_bsc_mtr_gnr_s ";
$sql.= sprintf(" WHERE mtr_nm in (%s) and mtr_s_dlt = 0 ",$sql_terms);
if(!empty($sql_unterms)){
$sql.= sprintf(" and mtr_nm not in (%s) ",$sql_unterms);
}
$sql.= " GROUP BY rcp_no";
//- pre_sqlへ保存
$rcp_list['pre_sql']['add_main'][] = $sql;
$res = $db->query($sql);
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$rcp_no_arr['add_main'][] = $row['rcp_no'];
}
return $rcp_no_arr['add_main'];
}
//---------------------------------------------------------------------------
//- Function getRcpNo_from_Kind()
//-
//- Kind(種類) からレシピ番号配列取得
//---------------------------------------------------------------------------
//- 引数:db_resource
//- main
//- &rcp_list(参照渡し)
//-
//- 戻り値:レシピ番号配列
//---------------------------------------------------------------------------
function getRcpNo_from_Kind($db,$kind,$rcp_list){
if(!empty($kind) && '0' != $kind){
$sql = "SELECT * FROM contents_data_bsc_r_knd_s ";
$sql.= sprintf(" WHERE r_knd_no = %s and r_knd_dlt = 0 ",$kind);
$sql.= " GROUP BY rcp_no";
//- pre_sqlへ保存
//$rcp_list['pre_sql']['add_kind'][] = $sql;
$res = $db->query($sql);
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$rcp_no_arr['add_kind'][] = $row['rcp_no'];
}
return $rcp_no_arr['add_kind'];
}
}
//---------------------------------------------------------------------------
//- Function getRcpNo_from_Menu()
//-
//- Menuテーブル(表示上はジャンル) からレシピ番号配列取得
//---------------------------------------------------------------------------
//- 引数:db_resource
//- main
//- &rcp_list(参照渡し)
//-
//- 戻り値:レシピ番号配列
//---------------------------------------------------------------------------
function getRcpNo_from_Menu($db,$genre,$rcp_list){
if(!empty($genre) && '0' != $genre){
$sql = "SELECT * FROM contents_data_bsc_r_menu_s ";
$sql.= sprintf(" WHERE r_menu_no = %s and r_menu_dlt = 0 ",$genre);
$sql.= " GROUP BY rcp_no";
//- pre_sqlへ保存
//$rcp_list['pre_sql']['add_kind'][] = $sql;
$res = $db->query($sql);
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$rcp_no_arr['genre'][] = $row['rcp_no'];
}
return $rcp_no_arr['genre'];
}
}
//---------------------------------------------------------------------------
//- Function getRcpNo_from_Cook()
//-
//- Cook(調理方法) からレシピ番号配列取得
//---------------------------------------------------------------------------
//- 引数:db_resource
//- main
//- &rcp_list(参照渡し)
//-
//- 戻り値:レシピ番号配列
//---------------------------------------------------------------------------
function getRcpNo_from_Cook($db,$cook,$rcp_list){
if(!empty($cook) && '0' != $cook){
$sql = "SELECT * FROM contents_data_bsc_r_cook_mtd_s ";
$sql.= sprintf(" WHERE r_cook_mtd_no = %s and r_cook_mtd_dlt = 0 ",$cook);
$sql.= " GROUP BY rcp_no";
//- pre_sqlへ保存
//$rcp_list['pre_sql']['add_cook'][] = $sql;
$res = $db->query($sql);
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$rcp_no_arr['add_cook'][] = $row['rcp_no'];
}
}
return $rcp_no_arr['add_cook'];
}
//---------------------------------------------------------------------------
//- Function getRcpNo_from_Cal()
//-
//- Cal(カロリー) からレシピ番号配列取得
//---------------------------------------------------------------------------
//- 引数:db_resource
//- cal
//- &rcp_list(参照渡し)
//-
//- 戻り値:レシピ番号配列
//---------------------------------------------------------------------------
function getRcpNo_from_Cal($db,$cal,$rcp_list){
//switch($terms['calorie']){
switch($cal){
case "1":
$where = " R.rcp_crl < 100 ";
break;
case "7":
$where = sprintf(" R.rcp_crl >= %d ",(($cal - 1) * 100));
break;
default:
$where = sprintf(" R.rcp_crl >= %d and R.rcp_crl < %d ",(($cal - 1) * 100),($cal * 100));
break;
}
$sql = "Select R.* ";
$sql .= "From contents_data_bsc_r_new R ";
$sql .= " Where ";
$sql .= $where;
$sql .= " Order by rcp_crl ASC";
//- pre_sqlへ保存
$rcp_list['pre_sql']['cal'][] = $sql;
$res = $db->query($sql);
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
/*
$line = array(
'rcp_no' => $row['uniq_id'],
'rcp_nm' => $row['rcp_nm'],
'rcp_time' => $row['rcp_time'],
'rcp_num' => $row['rcp_num'],
'rcp_crl' => $row['rcp_crl']
);
*/
$list_cal[] = $row['uniq_id'];
}
return $list_cal;
}
//---------------------------------------------------------------------------
//- Function getRcpNo_from_Style()
//-
//- Style(スタイル) からレシピ番号配列取得
//---------------------------------------------------------------------------
//- 引数:db_resource
//- style
//- &rcp_list(参照渡し)
//-
//- 戻り値:レシピ番号配列
//---------------------------------------------------------------------------
function getRcpNo_from_Style($db,$style,$rcp_list){
$where = sprintf(" r_style_no = %s and r_style_dlt = 0 ",$style);
$sql = "";
$sql .= "Select * ";
$sql .= "From contents_data_bsc_r_style_s ";
$sql .= "Where ";
$sql .= $where;
$sql .= "and rcp_no is not NULL and r_style_dlt = 0 ";
$sql .= "Group by rcp_no ";
//- pre_sqlへ保存
$rcp_list['pre_sql']['style'][] = $sql;
$res = $db->query($sql);
while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)){
$rcp_arr[] = $row['rcp_no'];
//$rcp_key .= sprintf("%s,",$row['rcp_no']);
}
return $rcp_arr;
}
?>