相关疑难解决方法(0)

mysql(5.1)>使用变量名创建表

我正在尝试创建一个基于当前年份和月份(2011-09)的名称的表,但MySQL似乎不喜欢这样.

SET @yyyy_mm=Year(NOW())+'-'+Month(NOW());
CREATE TABLE `survey`.`@yyyy_mm` LIKE `survey`.`interim`;
SHOW TABLES IN `survey`;

+-----------+
| interim   |
+-----------+
| @yyyy_mm  |
+-----------+
Run Code Online (Sandbox Code Playgroud)

如果我CREATE TABLE;没有勾选@yyyy_mm,我会得到一般语法错误.

@yyyy_mm解决了2020.

mysql variables dynamic tablename

13
推荐指数
2
解决办法
2万
查看次数

使用mysql Prepared Statement执行多个分号分隔查询

我试图在mysql中创建一个存储过程,它在每个请求上创建一个新表,从另一个表复制内容并提取所需的数据,最后删除表.存储过程非常大,所以我不能在每次查询后执行EXECUTE,因此我尝试以分号分隔格式一起执行查询.但在最终执行时,我得到错误代码:1064.我尝试的方法是否可行,或者是否有更好的方法.

SET tableName = (SELECT CONCAT("table",(UNIX_TIMESTAMP(NOW()))));

SET @tquery =CONCAT('CREATE TABLE `',tableName,'` (select pt.* from post_table pt join on user u on pt.user_id=u.id where pt.client="client",pt.group="group");');
SET @tquery = CONCAT(@tquery,' SELECT * FROM ',tableName,';');    
SET @tquery = CONCAT(@tquery,' DROP TABLE ',tableName,';');    
PREPARE stmt FROM @tquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;  
Run Code Online (Sandbox Code Playgroud)

mysql sql execute

11
推荐指数
1
解决办法
1万
查看次数

sql查询将year设置为列名

通过编写以下查询

SELECT item_name, YEAR( DATE ) , SUM( item_sold_qty ) 
FROM item
JOIN sales ON item.id = sales.item_number
GROUP BY YEAR( DATE ) , item_name
ORDER BY item_name
Run Code Online (Sandbox Code Playgroud)

我能够得到以下结果

item_name   YEAR( DATE )    SUM( item_sold_qty )
pencil          2011              22
pencil          2012              44
eraser          2012              22
eraser          2011              11
pen             2012              66
pen             2011              33
nib             2012              88
nib             2011              44
Run Code Online (Sandbox Code Playgroud)

相反,我希望以下列方式得到结果

 item_name      2011    2012
    pencil       22      44            
    eraser       11      22                   
    pen          33      66                  
    nib          44      88
Run Code Online (Sandbox Code Playgroud)

我不是很擅长sql,并且不知道如何将年份设置为列名.需要帮忙.

注意 ::我的数据库有2个表.销售表的日期列有不同的日期,如2012-03-01,2012-04-02,2011-07-03,等......

mysql sql

6
推荐指数
1
解决办法
5477
查看次数

如何在MySQL程序中的列名中进行DRY?

我是referencig name,descriptionuser_id列的meta表.未来两次,也许更多(谁知道?).这些列用于计算元资源的ETag.

添加一个有助于计算ETag的列将迫使我将代码更改N次,这很糟糕.

有没有办法让它干并将这些列名存储在别处?因为我想INSERT在执行meta 时也使用这些列名.

IF only = true THEN
    -- Calculate ETag on meta fields only
    UPDATE meta
    SET etag = etag(CONCAT(name, description, user_id))
    WHERE id = meta_id;
ELSE
    -- Calculate Etag on meta fields and meta customers
    BEGIN
        DECLARE c_etags VARCHAR(32);

        -- Compute c_etags

        UPDATE meta
        SET etag = etag(CONCAT(etag(name, description, user_id), c_etags))
        WHERE id = meta_id;
    END;
END IF;
Run Code Online (Sandbox Code Playgroud)

免责声明:这段代码是未经测试的,除了简单的陈述之外,我对MySQL的东西很新.

编辑:etagMD5MySQL功能.也许这是一个选择:

CREATE PROCEDURE …
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-procedures

5
推荐指数
0
解决办法
271
查看次数

如何在MySQL数据库中替换所有行中所有字段中的所有表?

我有一个Moodle安装,我迁移到另一台服务器,我需要更改几个旧域的引用.

对于搜索所有表,所有字段和所有行的给定数据库,如何在MySQL中替换另一个字符串的字符串

我不需要更改字段名称,只需更改值.


相关:如何使用mySQL replace()替换多个记录中的字符串?

但标记为答案解决方案意味着我强烈键入表名称,我需要将其解压缩到整个数据库,而不是手动处理运行脚本的每个表N次.

mysql sql records replace

5
推荐指数
3
解决办法
8706
查看次数

删除所有表中不再使用任何FK关系的所有行

为了修剪生产数据库以便在测试系统中加载,我们删除了许多表中的行.现在这让我们陷入了几个表格,即不再用于任何FK关系的行.我想要实现的就像Java中的垃圾收集.

或者换句话说:如果我在数据库中有M个表.他们中的N个(即大多数但不是全部)具有外键关系.我通过SQL删除了几个高级行(即只有传出的FK关系).这样就只在相关表中留下了行.

有人有SQL存储过程或Java程序找到N个表,然后遵循所有FK关系来删除不再需要的行.

如果发现N表太复杂,我可能会为脚本提供要扫描的表列表,或者最好是要忽略的表的负列表.

另请注意:

  1. 我们有一些表,其在许多使用(> 50)FK关系,即A,B,C,...在所有使用行Z.
  2. 所有FK关系都使用技术PK列,该列始终是单列.

mysql garbage-collection stored-procedures

5
推荐指数
2
解决办法
1071
查看次数

Sql循环通过数据库表

在我的数据库中,我有20个表.

其中一个名为"Connections"的表包含两列"TableName"和"NextHi"

+--------+-------------+
| NextHi | TableName   |
+--------+-------------+
| 43     | Page        |
+--------+-------------+
| 32     | User        |
+--------+-------------+
Run Code Online (Sandbox Code Playgroud)

所以在"TableName"列中是其他表的名称.

彼此表有列"Id"

我需要的是脚本将循环通过数据库中的所有表,前面的表返回一行3列:

  1. 表名
  2. MaxID - 表格
  3. 当前表的"连接"表中的NextHi值

所以结果应该是这样的:

+-----------+-------------+-------+
| TableName | NextHi      | MaxId |
+-----------+-------------+-------+
| Page      | 43          | 435   |
+-----------+-------------+-------+
| User      | 32          | 768   |
+-----------+-------------+-------+
Run Code Online (Sandbox Code Playgroud)

我有脚本,它返回给我,但它有每个表的选择,表名称是硬编码的:

(
  SELECT
    "User" as `TableName`,
    `Connections`.`NextHi`,
    (SELECT MAX(`Id`) FROM `User`) as `MaxId`
  FROM `Connections`
  WHERE `Connections`.`TableName` = "User"
)
 UNION ALL (
  SELECT
    "Page" …
Run Code Online (Sandbox Code Playgroud)

mysql sql

5
推荐指数
0
解决办法
926
查看次数

订购没有标识符的mysql结果

通常我会在自动增量上有一个名为ID的表字段.这样我可以使用这个字段等订购.

但是我无法控制表的结构,并想知道如何以相反的顺序将结果设置为默认值.

我正在使用

$q = mysql_query("SELECT * FROM ServerChat LIMIT 15");
Run Code Online (Sandbox Code Playgroud)

但是就像我说的那样我没有可以订购的字段,那么有没有办法告诉mysql反转它获得结果的顺序?即最后一行到第一行而不是默认行.

php mysql

2
推荐指数
1
解决办法
164
查看次数

postgres:从带有参数的查询中获取可执行查询

有没有办法从带有$参数的查询中获取可执行查询。实际上它很奇怪,但是我想在数据库中存储可执行查询。没有参数的完整查询($ 1,$ 2,$ 3)

我正在使用node-postgres

pg.connect(conString, function(err, client, done) {

console.log('Executing Insert query');

client.query('insert into tablename(column1,column2,column3) values($1,$2,$3)',["data1","data2","data3"],  function(err, result) {

    done();

    console.log('finished executing Insert query');
    });
});
Run Code Online (Sandbox Code Playgroud)

这就是我所需要的

insert into tablename(column1,column2,column3) values("data1","data2","data3")
Run Code Online (Sandbox Code Playgroud)

postgresql node-postgres

1
推荐指数
1
解决办法
1217
查看次数