2014-05-06 20 views
0

我有記錄問題,我必須記錄在我的表中。如果存在具有相同名稱的產品,我想更新行。如果只有一條記錄來自行重複

if ((int)$price > 0) { 
    $query = "SELECT name FROM phones WHERE LOWER(`name`) = LOWER(?)"; 
    $duplicate = $this->db->query($query, array($name)); 
    if ($duplicate->num_rows() > 0) { 
     $query = "update phones (name,price,shop,link,photo,priority) VALUES (?,?,?,?,?,?)"; 
     $this->db->query($query, array($name,$price,"Pigu.lt", $link, $photos, rand(0,1000))); 
    } else { 
     $query = "insert into phones (name,price,shop,link,photo,priority) VALUES (?,?,?,?,?,?)"; 
     $this->db->query($query, array($name,$price,"Pigu.lt", $link, $photos, rand(0,1000))); 
    } 
} 

表結構:

CREATE TABLE `phones` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(500) 
COLLATE utf8_lithuanian_ci NOT NULL, `price` int(15) 
    NOT NULL, `shop` varchar(100) 
COLLATE utf8_lithuanian_ci NOT NULL, `link` varchar(400) 
COLLATE utf8_lithuanian_ci NOT NULL, `photo` varchar(500) 
COLLATE utf8_lithuanian_ci NOT NULL, `priority` int(5) 
NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=544 DEFAULT CHARSET=utf8 COLLATE=utf8_lithuanian_ci; 

在知道代碼不工作,這

+0

應該不會是'$式兩份> num_rows',沒有'()' – Martijn

+0

它什麼都沒有改變,爲什麼不()? – Mangirdas

+0

在mysqli中的num行不是一個函數,但屬性,屬性沒有'()' – Martijn

回答

0

我不知道爲什麼你的PHP不工作的原因,請幫忙,但因爲你的標記發佈mysqlsql而不是php,我假設你會接受一個以SQL爲中心的解決方案。這裏有兩個;都假設name是表phones中的主鍵。

ANSI-compliant

$query = "INSERT INTO phones (name, price, shop, link, photo, priority) \ 
      VALUES (?,?,?,?,?,?) \ 
      ON DUPLICATE KEY UPDATE price=?, shop=?, link=?, photo=?, priority=?"; 
$randnum = rand(0, 1000); 
$this->db->query($query, array($name, $price, "Pigu.lt", $link, $photos, $randnum, 
           $price, "Pigu.lt", $link, $photos, $randnum)); 

MySQL-only

$query = "REPLACE INTO phones (name, price, shop, link, photo, priority) \ 
      VALUES (?,?,?,?,?,?)"; 
$this->db->query($query, array($name, $price, "Pigu.lt", $link, $photos, rand(0,1000))); 
+0

名稱不是主鍵。並與此重複不起作用。更新問題 – Mangirdas

相關問題