我正在创建一个类似于phpMyAdmin的自定义脚本。
我需要使用星号(*
)才能在不知道列的情况下选择表中的所有数据。诀窍在于我必须限制从每列中检索的数据量以提高效率。基本上这样做,
SELECT SUBSTR(Username, 20) FROM Users LIMIT 10
将Username列限制为 20个字符,但我必须同时执行此操作,
SELECT SUBSTR(*, 20) FROM Users LIMIT 10
如何在使用星号时选择每列上具有特定字符限制的所有数据?
答案 0 :(得分:2)
您必须指定要撤消的所有列。
SELECT SUBSTR(Username,20) as user, SUBSTR(Column2,20) as col, FROM Users LIMIT 10
你不能以你想要的方式在mysql函数中使用星号。每列都必须受到限制。
答案 1 :(得分:2)
SELECT SUBSTR(COL1,20), SUBSTR(COL2,20),SUBSTR(COL3,20), .... FROM Users LIMIT 10
您必须明确限制每列。
答案 2 :(得分:2)
另一种方法是创建动态SQL,唯一需要的是
以下是查询:
SET @db = 'db_2_a8d87'; -- database name
SET @tb = 'Table1'; -- table name
SET @sql = NULL;
SELECT GROUP_CONCAT(CONCAT('SUBSTRING(',column_Name,',1,3)', column_Name)) INTO @sql
FROM information_schema.columns
WHERE table_schema = @db AND table_name = @tb;
SET @sql = CONCAT('SELECT ', @sql, ' FROM ', @tb);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
答案 3 :(得分:1)
作为替代方案,您可以分两部分来完成。对于第一部分,运行:
SHOW COLUMNS IN Users;
然后使用该查询的Field列中的结果以编程方式生成第二个查询,选择第一个查询中返回的每个列名。