- Timestamp:
- 2013/03/15 16:37:50 (11 years ago)
- Location:
- branches/version-2_13-dev
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_13-dev
-
branches/version-2_13-dev/data/class/helper/SC_Helper_DB.php
r22595 r22735 56 56 * カラムの生成も行う場合は, $col_type も必須となる. 57 57 * 58 * @param string $ table_name テーブル名58 * @param string $$tableName テーブル名 59 59 * @param string $column_name カラム名 60 60 * @param string $col_type カラムのデータ型 … … 65 65 * 引数 $add == false でカラムが存在しない場合 false 66 66 */ 67 function sfColumnExists($table _name, $col_name, $col_type = '', $dsn = '', $add = false)67 function sfColumnExists($tableName, $colName, $colType = '', $dsn = '', $add = false) 68 68 { 69 69 $dbFactory = SC_DB_DBFactory_Ex::getInstance(); … … 73 73 74 74 // テーブルが無ければエラー 75 if (!in_array($table _name, $objQuery->listTables())) return false;75 if (!in_array($tableName, $objQuery->listTables())) return false; 76 76 77 77 // 正常に接続されている場合 78 78 if (!$objQuery->isError()) { 79 79 // カラムリストを取得 80 $columns = $objQuery->listTableFields($table _name);81 82 if (in_array($col _name, $columns)) {80 $columns = $objQuery->listTableFields($tableName); 81 82 if (in_array($colName, $columns)) { 83 83 return true; 84 84 } … … 87 87 // カラムを追加する 88 88 if ($add) { 89 $objQuery->query("ALTER TABLE $table_name ADD $col_name $col_type "); 90 return true; 89 return $this->sfColumnAdd($tableName, $colName, $colType); 91 90 } 92 91 return false; 93 92 } 93 94 function sfColumnAdd($tableName, $colName, $colType) { 95 $objQuery =& SC_Query_Ex::getSingletonInstance($dsn); 96 return $objQuery->query("ALTER TABLE $tableName ADD $colName $colType "); 97 } 94 98 95 99 /** 96 100 * データの存在チェックを行う. 97 101 * 98 * @param string $table _name テーブル名102 * @param string $tableName テーブル名 99 103 * @param string $where データを検索する WHERE 句 100 * @param string $dsn データソース名 101 * @param string $sql @deprecated データの追加を行う場合の SQL文 102 * @param bool $add @deprecated データの追加も行う場合 true 104 * @param array $arrWhereVal WHERE句のプレースホルダ値 103 105 * @return bool データが存在する場合 true, データの追加に成功した場合 true, 104 106 * $add == false で, データが存在しない場合 false 105 107 */ 106 function sfDataExists($table _name, $where, $arrWhereVal, $dsn = '', $sql = '', $add = false)108 function sfDataExists($tableName, $where, $arrWhereVal) 107 109 { 108 110 $dbFactory = SC_DB_DBFactory_Ex::getInstance(); … … 110 112 111 113 $objQuery =& SC_Query_Ex::getSingletonInstance(); 112 $exists = $objQuery->exists($table _name, $where, $arrWhereVal);114 $exists = $objQuery->exists($tableName, $where, $arrWhereVal); 113 115 114 116 // データが存在する場合 TRUE 115 117 if ($exists) { 116 118 return TRUE; 117 // $add が TRUE の場合はデータを追加する118 } elseif ($add) {119 return $objQuery->exec($sql);120 // $add が FALSE で、データが存在しない場合 FALSE121 119 } else { 122 120 return FALSE; … … 1160 1158 $getWhere = "$keyIdColumn = ?"; 1161 1159 } 1162 $ rank = $objQuery->get('rank', $tableName, $getWhere, array($keyId));1160 $oldRank = $objQuery->get('rank', $tableName, $getWhere, array($keyId)); 1163 1161 1164 1162 $max = $objQuery->max('rank', $tableName, $where); 1165 1166 // 値の調整(逆順) 1167 if ($pos > $max) { 1168 $position = 1; 1169 } else if ($pos < 1) { 1170 $position = $max; 1171 } else { 1172 $position = $max - $pos + 1; 1173 } 1174 1175 //入れ替え先の順位が入れ換え元の順位より大きい場合 1176 if ($position > $rank) $term = 'rank - 1'; 1177 1178 //入れ替え先の順位が入れ換え元の順位より小さい場合 1179 if ($position < $rank) $term = 'rank + 1'; 1180 1181 // XXX 入れ替え先の順位が入れ替え元の順位と同じ場合 1182 if (!isset($term)) $term = 'rank'; 1183 1184 // 指定した順位の商品から移動させる商品までのrankを1つずらす 1185 $sqlval = array(); 1186 $arrRawSql = array( 1187 'rank' => $term, 1188 ); 1189 $str_where = 'rank BETWEEN ? AND ?'; 1190 if ($where != '') { 1191 $str_where .= " AND $where"; 1192 } 1193 1194 if ($position > $rank) { 1195 $arrWhereVal = array($rank + 1, $position); 1196 $objQuery->update($tableName, $sqlval, $str_where, $arrWhereVal, $arrRawSql); 1197 } 1198 if ($position < $rank) { 1199 $arrWhereVal = array($position, $rank - 1); 1200 $objQuery->update($tableName, $sqlval, $str_where, $arrWhereVal, $arrRawSql); 1163 1164 // 更新するランク値を取得 1165 $newRank = $this->getNewRank($pos, $max); 1166 // 他のItemのランクを調整する 1167 $ret = $this->moveOtherItemRank($newRank, $oldRank, $objQuery, $tableName, $where); 1168 if (!$ret) { 1169 // 他のランク変更がなければ処理を行わない 1170 return; 1201 1171 } 1202 1172 1203 1173 // 指定した順位へrankを書き換える。 1204 1174 $sqlval = array( 1205 'rank' => $ position,1175 'rank' => $newRank, 1206 1176 ); 1207 1177 $str_where = "$keyIdColumn = ?"; … … 1214 1184 $objQuery->commit(); 1215 1185 } 1186 1187 /** 1188 * 指定された位置の値をDB用のRANK値に変換する 1189 * 指定位置が1番目に移動なら、newRankは最大値 1190 * 指定位置が1番下へ移動なら、newRankは1 1191 * 1192 * @param int $position 指定された位置 1193 * @param int $maxRank 現在のランク最大値 1194 * @return int $newRank DBに登録するRANK値 1195 */ 1196 function getNewRank($position, $maxRank) { 1197 1198 if ($position > $maxRank) { 1199 $newRank = 1; 1200 } else if ($position < 1) { 1201 $newRank = $maxRank; 1202 } else { 1203 $newRank = $maxRank - $position + 1; 1204 } 1205 return $newRank; 1206 } 1207 1208 /** 1209 * 指定した順位の商品から移動させる商品までのrankを1つずらす 1210 * 1211 * @param int $newRank 1212 * @param int $oldRank 1213 * @param object $objQuery 1214 * @param string $where 1215 * @return boolean 1216 */ 1217 function moveOtherItemRank($newRank, $oldRank, &$objQuery, $tableName, $addWhere) { 1218 1219 $sqlval = array(); 1220 $arrRawSql = array(); 1221 $where = 'rank BETWEEN ? AND ?'; 1222 if ($addWhere != '') { 1223 $where .= " AND $Where"; 1224 } 1225 if ($newRank > $oldRank) { 1226 //位置を上げる場合、他の商品の位置を1つ下げる(ランクを1下げる) 1227 $arrRawSql['rank'] = 'rank - 1'; 1228 $arrWhereVal = array($oldRank + 1, $newRank); 1229 } else if ($newRank < $oldRank) { 1230 //位置を下げる場合、他の商品の位置を1つ上げる(ランクを1上げる) 1231 $arrRawSql['rank'] = 'rank + 1'; 1232 $arrWhereVal = array($newRank, $oldRank - 1); 1233 } else { 1234 //入れ替え先の順位が入れ替え元の順位と同じ場合なにもしない 1235 return false; 1236 } 1237 1238 return $objQuery->update($tableName, $sqlval, $where, $arrWhereVal, $arrRawSql); 1239 1240 } 1241 1216 1242 1217 1243 /**
Note: See TracChangeset
for help on using the changeset viewer.