0

次のコードを使用して、MySQL テーブルからデータを選択しています。少し面倒なように見えるので、誰かがこれを改善する方法を教えてもらえますか?

また、UPDATE ステートメントを実行して、顧客がデータベースから照会されるたびに「views」列の値をインクリメントする必要があります。データベースの各顧客行には、「ビュー」という名前の列があります。たとえば、ABC Corp が 100 回のビューを持っているとします。ABC Corp を検索してデータベースからレコードが返された場合、このレコードの "views" 列は 101 に更新されます。これを行う最善の方法は何ですか?

if ($search && ($group && $group !== "*")) {
  $sql = "SELECT * FROM customers WHERE description LIKE :description AND groupId LIKE :groupId";
  $result = $conn->prepare($sql);
  $result->bindValue(":description", "%" . $search . "%", PDO::PARAM_STR);
  $result->bindValue(":groupId", $groupId, PDO::PARAM_INT);
} else if ($search) {
  $sql = "SELECT * FROM customers WHERE description LIKE :description";
  $result = $conn->prepare($sql);
  $result->bindValue(":description", "%" . $search . "%", PDO::PARAM_STR);
} else if ($group !== "*") {
  $sql = "SELECT * FROM customers WHERE groupId LIKE :groupId";
  $result = $conn->prepare($sql);
  $result->bindValue(":groupId", $groupId, PDO::PARAM_INT);
} else {
  $sql = "SELECT * FROM customers";
  $result = $conn->prepare($sql);
}
4

1 に答える 1

2

このようなものはどうですか、

 $sql = "SELECT * FROM customers ";
 $and = $grp = FALSE;

 if($search || ($group && $group !== "*") {
 $sql .= " WHERE ";
 if ($search) {
  $sql .= " description LIKE :description ";
  $and = TRUE;
 } 

 if ($group && $group !== "*") {
   if( $and === TRUE )
     $sql .= " AND ";        
   $sql .= " groupId LIKE :groupId ";  
   $grp = TRUE;     
 }     
 } 

 $result = $conn->prepare($sql);
 if( $and === TRUE)
  $result->bindValue(":description", "%" . $search . "%", PDO::PARAM_STR);

 if( $grp === TRUE)
   $result->bindValue(":groupId", $groupId, PDO::PARAM_INT);

UPDATE声明については、

   //say $cust_name is the requested customer to be searched
   $sql = "SELECT views from customers where customer_name = '" $cust_name."'";
   $res = $conn->query($sql);
   $views = $res->fetchColumn() + 1;
   //sets 'views' to num_of_customers/rows returned.
   $sql = "UPDATE customers SET VIEWS = " .$views." WHERE customer_name = '" $cust_name."'";
   $res = $conn->query($sql);
于 2012-11-12T16:42:30.533 に答える