Tag: MySQL

在MySQL查询的WHERE子句中使用列别名会产生错误

我正在运行的查询如下,但是我得到这个错误: #1054 – “IN / ALL / ANY子查询中的未知列'guaranteed_postcode' SELECT `users`.`first_name`, `users`.`last_name`, `users`.`email`, SUBSTRING(`locations`.`raw`,-6,4) AS `guaranteed_postcode` FROM `users` LEFT OUTER JOIN `locations` ON `users`.`id` = `locations`.`user_id` WHERE `guaranteed_postcode` NOT IN #this is where the fake col is being used ( SELECT `postcode` FROM `postcodes` WHERE `region` IN ( 'australia' ) ) 我的问题是:为什么我无法在同一个数据库查询的where子句中使用假列?

PDO MySQL:使用PDO :: ATTR_EMULATE_PREPARES还是不行?

这是迄今为止我读到的有关PDO::ATTR_EMULATE_PREPARES : 因为MySQL本地准备绕过查询缓存,所以PDO的准备模拟对性能更好 。 MySQL的本地准备对安全性更好(防止SQL注入) 。 MySQL的本地准备更适合错误报告 。 我不知道这些陈述如何是真实的。 选择MySQL接口的最大问题是防止SQL注入。 第二个问题是性能。 我的应用程序目前使用程序MySQLi(没有准备好的语句),并利用查询缓存相当多。 它很少会在一个请求中重复使用准备好的语句。 我开始转移到PDO的命名参数和准备好的语句的安全性。 我正在使用MySQL 5.1.61和PHP 5.3.2 我应该离开PDO::ATTR_EMULATE_PREPARES启用或不? 有没有办法同时具有查询缓存的性能和预准备语句的安全性?

MySQL:在数据库上授予**全部**特权

我创建了数据库,例如“mydb”。 CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin; CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH'; GRANT ALL ON mydb.* TO 'myuser'@'%'; GRANT ALL ON mydb TO 'myuser'@'%'; GRANT CREATE ON mydb TO 'myuser'@'%'; FLUSH PRIVILEGES; 现在我可以从任何地方登录到数据库,但不能创建表。 如何授予该数据库和(将来)表中的所有权限。 我不能在'mydb'数据库中创建表。 我总是得到: CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin); ERROR 1142 (42000): CREATE command […]

在列中查询多个值

我有一张桌子,像: id name children 1 Roberto Michael,Dia 2 Maria John,Alex 3 Mary Alexandre,Diana 我的问题是 我想找到谁有一个名叫亚历克斯的孩子。 我不能在SQL中使用"where children = 'Alex'" ,因为我在同一单元格中有多个名称。 所以我使用"where children LIKE '%Alex%'" – – 看起来很聪明,但同时我得到所有开始像亚历克斯:(亚历山大或我想得到dia但结果是Dia和戴安娜:( 我怎样才能得到这个数据类型的单个亚历克斯? 我希望我能用我可怕的英语解释我的问题:D

从MySQL数据库的每个表中搜索所有字段

我想从MySQL数据库的所有表中搜索给定字符串的所有字段,可能使用的语法如下: SELECT * FROM * WHERE * LIKE '%stuff%' 有没有可能做这样的事情?

用MySQL计算中位数的简单方法

用MySQL计算中位数的最简单的方法是什么(希望不要太慢)? 我用AVG(x)找到了平均值,但是我很难找到一个简单的计算中位数的方法。 现在,我将所有行返回给PHP,进行排序,然后选择中间行,但是在一个MySQL查询中肯定有一些简单的方法。 示例数据: id | val ——– 1 4 2 7 3 2 4 2 5 9 6 8 7 3 对val排序得到2 2 3 4 7 8 9 ,所以中位数应该是4 ,而对于SELECT AVG(val) ,其中== 5 。

在MySQL中使用Join进行删除

CREATE TABLE `clients` ( `client_id` int(11), PRIMARY KEY (`client_id`) ); CREATE TABLE `projects` ( `project_id` int(11) unsigned, `client_id` int(11) unsigned, PRIMARY KEY (`project_id`) ); CREATE TABLE `posts` ( `post_id` int(11) unsigned, `project_id` int(11) unsigned, PRIMARY KEY (`post_id`) ); 在我的PHP代码中,删除客户端时,我想删除所有项目的帖子: DELETE FROM posts INNER JOIN projects ON projects.project_id = posts.project_id WHERE projects.client_id = :client_id; posts表没有外键client_id ,只有project_id […]

可能做一个MySQL外键到两个可能的表之一?

那么这是我的问题,我有三个表; 地区,国家,州。 国家可以在区域内部,国家可以在区域内部。 地区是食物链的顶端。 现在我要添加一个有两列的popular_areas表; region_id和popular_place_id。 是否有可能使popular_place_id成为任何国家或国家的外部关键。 我可能将不得不添加一个popular_place_type列来确定id是否描述一个国家或国家的任何一种方式。

MySQL:大VARCHAR与TEXT?

我在MySQL中有一个消息表,它记录用户之间的消息。 除了典型的ID和消息类型(所有整数类型),我需要将实际的消息文本保存为VARCHAR或TEXT。 我设置了3000个字符的前端限制,这意味着这些消息永远不会被插入到数据库比这更长。 使用VARCHAR(3000)还是TEXT有理由吗? 有些东西只是写VARCHAR(3000),感觉有点反直觉。 我已经通过堆栈溢出的其他类似的帖子,但将是很好的获得特定于这种类型的常见信息存储的意见。

如何在MySQL中查找具有特定列名的所有表?

我有2-3个不同的列名,我想在整个数据库中查找并列出所有包含这些列的表。 任何简单的脚本?