假设现在有表a 50个字段 1,2,3,4.....50
全选为 select * from `a`现在不想选第48个字段的信息
而我又不想写 select 1,2,3,4,5...(没有48)..50 from `a` 有什么办法?有没有啥语法?google都不知道该咋搜啥.....囧zzzz
全选为 select * from `a`现在不想选第48个字段的信息
而我又不想写 select 1,2,3,4,5...(没有48)..50 from `a` 有什么办法?有没有啥语法?google都不知道该咋搜啥.....囧zzzz
select * from a
limit 0, 48如果是Oracle
select * from
( select * from a )
where 1 >= rownum and rownum <= 48;
如果允许使用PEAR,可以直接用parger
如果你非要这么做,那就建个视图,不包含这个字段。
然后可以直接select * from v_table
from
`a` natural join `b` natural join `c`
where
`a`.`1` = `c`.`1` and `a`.`2` = xxx因为c中有一个字段是老鼠屎c.shit distinct后,其余数据会重复..所以我就想不选这个字段,只选其他的...
如果是几个的话
select * from a where id not in (40,38)
select * from a where id not in (40,38)
这个的意思是?
小的不才,没看懂...
select * from a where id not in (40,38)
=
select * from a where id!=40 and id!=38
结果是0条
因为c.shit是包含在c里面的,只要c.shit的not in不匹配,c表一条数据都不会过,natural join不出来大家继续....我加分....select distinct *
from
`a` natural join `b` natural join `c`
where
`a`.`1` = `c`.`1` and `a`.`2` = xxx
and
c.shit not in (select c.shit from c)
<?php
$res = mysql_query('select * from `a` limit 1', $link);
$field_names = array();
for ($i=0; $i<50; $i++)
{
if ($i!=47)
$field_names[] = mysql_field_name($res, $i);
}$f_names = implode(",",$filed_names);
$SQL =<<EOT
select distinct $f_names
from
`a` natural join `b` natural join `c`
where
`a`.`1` = `c`.`1` and `a`.`2` = xxx
EOT
?>
这样行不行啊
除了视图,这是第二方案,动态生成sql....在runffer_yang提供的代码基础上,我又加入了字段验证...
//link DB
$conn = mysql_connect(DB_HOST,DB_USER,DB_PASS);
$link = mysql_select_db(DB_NAME,$conn);//查一条数据
$r = mysql_query('select * from `userreg` limit 1');
//获得表单名数量
$count = count(mysql_fetch_assoc($r));
for($i=0;$i<$count;$i++){
$tmp_name = mysql_field_name($r,$i);
//过滤掉c.shit
if($tmp_name != "c.shit"){
$filed_names[]= mysql_field_name($r,$i);
}
}
$f_names = implode(",",$filed_names);
$sql =<<<EOT
select distinct $f_names
from
`a` natural join `b` natural join `c`
where
`a`.`1` = `c`.`1` and `a`.`2` = xxx
EOT;
//n个字段的sql诞生了
print_r($sql);
其实我想要sql....不是一堆php....-_-#
应该是'select * from `c` limit 1'
ID 姓名 性别 年级 语文 数学 英语。。
1 张三 男 高一 80 90 90 。通过查询得到
语文 数学 英语。
80 90 90 。也就是用户不想查询前面的 “ID 姓名 性别 年级” 这4列。
但是后面的所有列又都要用户也不希望 SELECT 语文, 数学,英语, ... 后面所有的列名 FROM 表这个只排除某些列以外,其他的列都检索的,只有去查数据字典表,拼动态SQL来处理了。下面是一个演示的例子:(SQL Server 2005 Express 下测试通过)CREATE TABLE TestABC (
[ID] INT,
[姓名] VARCHAR(10),
[性别] CHAR(2),
[年级] CHAR(4),
[语文] INT,
[数学] INT,
[英语] INT,
[物理] INT,
[化学] INT
);INSERT INTO TestABC
VALUES(1, '张三', '男', '高一', 80, 90, 90, 95, 90);
-- 这个SQL,是除了 'ID', '姓名', '性别', '年级' 这4列以外,其他都检索。
DECLARE @sql VARCHAR(200);
BEGIN
SET @sql =
'SELECT ' + STUFF(
(SELECT
',' + col.name
FROM
sys.columns col
WHERE
col.object_id =
(SELECT object_id FROM sys.tables WHERE name = 'TestAbc')
AND col.name NOT IN ('ID', '姓名', '性别', '年级')
FOR XML PATH('')), 1 , 1, '') + ' FROM TestAbc';
EXECUTE (@sql);
END-- 这个SQL,是排除前面4列,从第5列开始全部检索。
DECLARE @sql VARCHAR(200);
BEGIN
SET @sql =
'SELECT ' + STUFF(
(SELECT
',' + col.name
FROM
sys.columns col
WHERE
col.object_id =
(SELECT object_id FROM sys.tables WHERE name = 'TestAbc')
AND col.column_id > 4
FOR XML PATH('')), 1 , 1, '') + ' FROM TestAbc';
EXECUTE (@sql);
END
2个SQL 的结果是一样的:语文 数学 英语 物理 化学
----------- ----------- ----------- ----------- -----------
80 90 90 95 90(1 行受影响)
http://hi.baidu.com/wangzhiqing999/blog/item/394c5ff831981b96b801a077.html