Drupal 数据库 API 查询 - row.update 如果存在,否则为 row.insert

2024-04-15数据库问题
5

本文介绍了Drupal 数据库 API 查询 - row.update 如果存在,否则为 row.insert的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我一直在尝试在 drupal 中运行一个查询,如果条目已经存在,它将更新条目,或者如果不存在则插入一个新条目.代码现在看起来像这样:

I've been trying to run a query in drupal that'll update entries if they already exists or insert a new entry if it doesnt. The code looks like this at the moment:

db_query("IF EXISTS (SELECT %d FROM {uc_posten_packages.pid})
UPDATE {uc_posten_packages} SET title = "%s", label = '%s', cost = '%d', length = '%d', width ='%d', height = '%d', weight = '%d'  WHERE pid = %d
ELSE
INSERT INTO {uc_posten_packages} VALUES ('%d', '%s', '%s', '%d', '%d', '%d', '%d', '%d')",$id, $title, $label, $rate, $length, $width, $height, $weight, $id, $id, $title, $label, $rate, $length, $width, $height, $weight);

我不明白为什么该查询会引发错误.错误中的所有数字都是正确的

I can't see why that query throws me an error. All the numbers in the error are correct

...near 'IF EXISTS (SELECT 1 FROM uc_posten_packages.pid) UPDATE uc_posten_packages ' at line 1 query:
IF EXISTS (SELECT 1 FROM uc_posten_packages.pid) UPDATE uc_posten_packages SET title = "vfbv", label = 'bbv', cost = '22', length = '232', width ='22', height = '22', weight = '22' WHERE pid = 1 ELSE INSERT INTO uc_posten_packages VALUES ('1', 'vfbv', 'bbv', '22', '232', '22', '22', '22')

这个查询是否应该有效和/或在 drupal 中是否有更好的方法来处理这个问题?

Should this query work and/or is there some better way dealing with this in drupal?

推荐答案

您正在寻找的东西被亲切地称为upsert"(更新否则插入),并且有一个专门用于此的 drupal 函数:db_merge.这里写得很好:http://drupal.org/node/310085

What you're looking for is cordially called an "upsert" (update otherwise insert), and there is a drupal function for just this: db_merge. Good write-up here: http://drupal.org/node/310085

drupal_write_record() 不会自动执行更新插入".它始终仅根据您传入的内容插入或更新,但不能同时插入或更新.

drupal_write_record() does not automatically perform an "upsert." It always either inserts or updates based on what you pass in only, but not both.

这篇关于Drupal 数据库 API 查询 - row.update 如果存在,否则为 row.insert的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

Mysql目录里的ibtmp1文件过大造成磁盘占满的解决办法
ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致...
2025-01-02 数据库问题
151

SQL 子句“GROUP BY 1"是什么意思?意思是?
What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)...
2024-04-16 数据库问题
62

MySQL groupwise MAX() 返回意外结果
MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)...
2024-04-16 数据库问题
13

MySQL SELECT 按组最频繁
MySQL SELECT most frequent by group(MySQL SELECT 按组最频繁)...
2024-04-16 数据库问题
16

为什么 Mysql 的 Group By 和 Oracle 的 Group by 行为不同
Why Mysql#39;s Group By and Oracle#39;s Group by behaviours are different(为什么 Mysql 的 Group By 和 Oracle 的 Group by 行为不同)...
2024-04-16 数据库问题
13

MySQL GROUP BY DateTime +/- 3 秒
MySQL GROUP BY DateTime +/- 3 seconds(MySQL GROUP BY DateTime +/- 3 秒)...
2024-04-16 数据库问题
14