2014-12-05 125 views
0

我想更新另一个表中使用和更新并加入。更新查询两个表

我愿与类别id字段更新category领域(最近一次插入) - 我要去哪里错了?

UPDATE book 
    JOIN category 
    SET book.category = category.id 
    WHERE id = $query->insert_id 

当前数据分别发送到两个表,没有更新。我只需要更新一行,我早先犯了这个错误,并更新了每一行!

我是非常新的pho/mysql,所以任何帮助和方向是值得欢迎的。

UPDATE

由于建议从@Benni我能够更新该行,但它不更新与最近一次插入但在我的数据库中的第一行。见下面

我的类别表

id cat_name 
2 Childrens 
3 Science 
1 Maths 
23 Comedy 

我的书表

id category title 
1 2   a title here 
2 2   a title here 
3 1   a title here 
4 Comedy  a title here 

这两个ID字段是主键。

当我运行更新时,我的书籍表更新为2 = Childrens,而不是23 =喜欢它的喜剧。

我最后INSERT

$query = $conn->prepare("INSERT INTO `book` (title,category,author,isbn,subtitle) VALUES (?,?,?,?,?)"); 
$query->bind_param('sssis',  
     $title, 
     $category, 
     $author, 
     $isbn, 
     $subtitle 
     ); 
$query->execute(); 
+0

您可能知道要放入书籍的类别的ID。只需将其放入用于创建书籍的“INSERT”查询即可。 – axiac 2014-12-05 16:07:26

+0

向我们展示更多代码。目前还不清楚你最后一次INSERT是什么,你想达到什么目的。 – axiac 2014-12-05 16:15:34

回答

1

UPDATE声明应该如下。首先您缺少JOIN ON条件,第二,将额外条件从WHERE移至JOIN ON条件。

UPDATE book b 
    JOIN category c ON b.some_common_column = c.some_common_column 
    AND c.id = $query->insert_id 
    SET b.category = c.id 
+0

您可以共享您的书籍和类别的表格结构以及少量样本数据。发布的代码在答案应该工作得很好。 'some_common_column'是表格之间的一个共同的列,您可以将它们关联起来或加入它们。这两张桌子之间是否有任何关系? – Rahul 2014-12-05 16:47:24

-1

您将在ON部分的您加入我们拧。试试这个:

UPDATE book, category 
SET book.category = category.id 
WHERE book.id = $query->insert_id 

或(与JOIN语法):

UPDATE book 
JOIN category 
ON book.id = $query->insert_id 
SET book.category = category.id 
+0

为什么downvote? – Benvorth 2014-12-05 16:11:38

+0

不知道。这工作,但它更新我的表中的每一行!我只想更新最近的一行。 – 2014-12-05 16:12:24

+0

你认为“最近的一排”是什么? – Benvorth 2014-12-05 16:13:30