我遇到了一个问题,通过在MySQL数据库模式中引入浮点列,浮点值的比较总是不会返回正确的结果。 1 – 50.12 2 – 34.57 3 – 12.75 4 – …(全部小于12.00) SELECT COUNT(*) FROM `users` WHERE `points` > "12.75" 这返回我“3”。 我读过,MySQL中浮点值的比较是一个坏主意,小数types是更好的select。 我有没有希望继续浮动types,并获得比较正常工作?
我有一个任务执行MySQL表,每行有单个任务的参数。 有很多工人应用程序(可能在不同的机器上),在循环中执行任务。 应用程序使用MySQL的本地C API访问数据库。 为了拥有一个任务,一个应用程序做这样的事情: 生成一个全球唯一的ID(为了简单起见,我们假设它是一个数字) UPDATE tasks SET guid = %d WHERE guid = 0 LIMIT 1 SELECT params FROM tasks WHERE guid = %d 如果最后一个查询返回一行,我们拥有它,并有参数运行 有没有一种方法可以在一次调用服务器中实现相同的效果(即“拥有”一行并获取其参数)?
首先,下面是问题的简要总结: 是否有可能有条件地运行INSERT语句? 类似这样的东西: IF(expression) INSERT… 现在,我知道我可以用存储过程来做到这一点。 我的问题是:我可以在我的查询中做到这一点? 现在,我为什么要这样做呢? 假设我们有以下两个表格: products: id, qty_on_hand orders: id, product_id, qty 现在,让我们来说20个巫毒娃娃(产品编号2)的订单进来。 我们首先检查手头是否有足够的数量: SELECT IF( ( SELECT SUM(qty) FROM orders WHERE product_id = 2 ) + 20 <= ( SELECT qty_on_hand FROM products WHERE id = 2) , 'true', 'false'); 然后,如果它评估为真,我们运行一个INSERT查询。 到现在为止还挺好。 但是,并发性有问题。 如果两个订单在同一时间进入,他们可能都会在其中任何一个订单进入之前阅读手头数量。 然后他们会下订单,从而超过qty_on_hand 。 所以,回到问题的根源: 是否可以有条件地运行INSERT语句,以便我们可以将这两个查询合并为一个? 我search了很多,我能find的唯一一种条件INSERT语句是ON DUPLICATE […]
任何人都可以告诉我如何解决这个问题? update ae44 set Price = Case when ID = 'AT259793380' then '500' when ID = 'AT271729590' then '600' when ID = 'AT275981020' then '700' end case 我只是想通过匹配ID大量更新基于ID的上市价格。
// BUILD VALUES $count = count($matches); for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $q = $this -> dbc -> prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash"); $q -> execute($matches); 上面的代码失败,出现以下错误 SQLSTATE [HY093]:参数号无效:参数未定义 虽然当count($matches) == […]
长话短说:我需要把几张表格中的数据放在一起,为了不必画出一张大桌子,我简化了它们。 我需要在一个查询中这样做,而且我不能使用PHP或任何其他语言来处理结果。 (如果我可以简单地使用我的方法,我会使用PHP) 这不会是一个问题,如果我有一个链接表连接t1行到t2,但不幸的是我不能也不能引入一个。 User table: (alias t1) user(varchar 150),resources(varchar 250) +——-+——-+ | user1 | 1;2;4 | +——-+——-+ | user2 | 2 | +——-+——-+ | user3 | 3;4 | +——-+——-+ Resources table: (alias t2) id(int 11 AI), data(text) +—+——-+ | 1 | data1 | +—+——-+ | 2 | data2 | +—+——-+ | 3 | data3 […]
根据PHP文档, mysql_insert_id从mysql表中取出最后插入的id。 我的问题是,如果我有一个网站,每秒插入超过2行到数据库,我可以使用mysql_insert_id并得到正确的ID我指INSERT查询行之前?
我有下面的表格: id | parent_id | quantity ————————- 1 | null | 5 2 | null | 3 3 | 2 | 10 4 | 2 | 15 5 | 3 | 2 6 | 5 | 4 7 | 1 | 9 现在我需要一个存储过程在mysql中recursion调用,并返回计算的数量。 例如,id 6具有5作为父母,其中3作为具有2作为父母的父母。 所以我需要计算4 * 2 * 10 * 3 (= 240)。 我对存储过程相当陌生,将来不会经常使用它们,因为我更喜欢在程序代码中而不是在数据库中使用我的业务逻辑。 […]
考虑下表: SELECT id, value FROM table ORDER BY id ASC; +—–+———+ | id | value | +—–+———+ | 12 | 158 | | 15 | 346 | | 27 | 334 | | 84 | 378 | | 85 | 546 | +—–+———+ id列是自动递增的,但包含间隙。 value列是数字。 我想通过设置与上面两行的value有关的value来看看随着时间的推移value的增加。 这是为行id=85我想设置行id=85 (546)的value对于行id=27 (334)的值。 行id=85计算值是546/334 = 1.63473。 这是我想要达到的结果: SELECT id, […]
我有一个MySQL字段引用另一个表,其中ID保存为逗号分隔列表,例如: 12,13,14,16 代表另一个表中的值。 我知道这是非常糟糕的错误,但是这是来自上面,我不能做任何事情。 现在的问题是,我想用这样的查询在该字段中search: SELECT … WHERE field LIKE '%1%' 现在的问题显然是几乎所有的条目都可以在这个示例查询中find,因为最常见的ID在范围10-20。 我的想法是search%,1,%,但这不适用于字段中的第一个和最后一个ID。 有没有像内部replace或我如何解决这个最好的办法?