想写个回复php评论回复功能怎么写的sql,怎么写

sql语句如何统计帖子回复总数?谁有代码共享一下。_百度知道
sql语句如何统计帖子回复总数?谁有代码共享一下。
问题是这样的。、我数据库里面有a,b两张表。a是存帖子的信息、b是存帖子的回复信息。、我现在的想实现的功能是。把某一个用户发表的帖子从a表全部查询出来,然后还要把查询出来的每个...
问题是这样的。、我数据库里面有a,b两张表。a是存帖子的信息、b是存帖子的回复信息。、我现在的想实现的功能是。把某一个用户发表的帖子从a表全部查询出来,然后还要把查询出来的每个帖子的回复数统计出来。
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:13996
获赞数:28130
假定两个表都用id字段关联,用户为useridselect a.*,c.replycount from a,(select id,count(*) as replycount from b group by id) c where a.id=c.id and a.userid='xxxxx'
采纳数:302
获赞数:399
SELECT COUNT(*) as num WHERE ****
意思都知道。主要是where条件不知该怎么写。能详细点么。
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。you have been blockedsql语句如何这样查询在查询结果中区分评论和回复,使用简单的单表自连接查询_百度知道
sql语句如何这样查询在查询结果中区分评论和回复,使用简单的单表自连接查询
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自知道合伙人认证行家
健身类行家
采纳数:145431
获赞数:630133
创建测试表,字段名看不清,自己起的create&table&test(id&int,content&varchar(2000),releasetime&datetime,person&varchar(100),parent_id&int)insert&into&test&values&(1,'今天心情不好','&11:26:21','曹操',0)insert&into&test&values&(2,'为什么呢','&11:33:28','司马懿',1)insert&into&test&values&(3,'对啊,为什么呢','&11:34:05','曹操',1)insert&into&test&values&(4,'其实我也不知道为啥不好','&11:34:43','曹操',2)insert&into&test&values&(5,'其实我也不知道为啥不好','&11:34:43','曹操',3)insert&into&test&values&(6,'我知道心情为啥不好','&11:35:36','诸葛亮',1)insert&into&test&values&(7,'那你说说为啥不好','&11:35:49','曹操',6)insert&into&test&values&(8,'因为你家司马懿不行了','&12:05:47','诸葛亮',7)insert&into&test&values&(9,'管我啥事','&12:06:18','司马懿',8)insert&into&test&values&(10,'既生亮何生瑜','&13:38:21','周瑜',0)insert&into&test&values&(11,'经典说得好,周先生','&13:38:43','诸葛亮',10)insert&into&test&values&(12,'厉害了我的哥','&13:39:02','曹操',11)insert&into&test&values&(14,'亮啊,你别生周先生的气','&13:40:46','司马懿',10)insert&into&test&values&(15,'没看懂','&13:41:12','粟裕',10)insert&into&test&values&(16,'别说话,小草','&13:41:59','诸葛亮',12)sqlserver下语句:with&t&as&(select&t1.parent_id,t1.id,t1.person&person1,t2.person&person2,t1.content&from&test&t1&left&join&test&t2&on&t1.parent_id=t2.id)select&case&when&t.parent_id&=&0&then&person1+'【发布】:'+content&when&t.parent_id&in&(select&id&from&t&where&parent_id=0)&then&person2+'【评论】'+person1+'说:'+contentelse&person2+'【回复】'+person1+'说:'+content&endfrom&t结果:
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。就一张表,先得出一张子表,然后自连接的SQL语句如何写
[问题点数:40分,结帖人zhanghengsdnu]
本版专家分:0
结帖率 92.86%
CSDN今日推荐
本版专家分:23336
2011年7月 MS-SQL Server大版内专家分月排行榜第二
本版专家分:6772
本版专家分:0
本版专家分:6772
本版专家分:0
本版专家分:6382
本版专家分:314107
2012年 荣获名人称号
2011年 总版技术专家分年内排行榜第四2010年 总版技术专家分年内排行榜第九2009年 总版技术专家分年内排行榜第八
2011年10月 总版技术专家分月排行榜第一
2011年12月 总版技术专家分月排行榜第二2011年9月 总版技术专家分月排行榜第二2009年11月 总版技术专家分月排行榜第二
本版专家分:23336
2011年7月 MS-SQL Server大版内专家分月排行榜第二
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!
其他相关推荐SQL语句大全_百度百科
清除历史记录关闭
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
SQL语句大全
即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语句的需求是最频繁的。
SQL语句大全基础
SQL语句大全创建数据库
创建之前判断该数据库是否存在
if exists (select * from sysdatabases where name='databaseName')
drop database databaseName
Create DATABASE databasename
on primary-- 默认就属于primary文件组,可省略
/*--数据文件的具体描述--*/
name=‘databasename_data’,-- 主数据文件的逻辑名称
filename=‘'所存位置:\databasename_data.mdf’, -- 主数据文件的物理名称
size=数值mb, --主数据文件的初始大小
maxsize=数值mb, -- 主数据文件增长的最大值
filegrowth=数值%--主数据文件的增长率
/*--日志文件的具体描述,各参数含义同上--*/
name='databasename_log', -- 日志文件的逻辑名称
filename='所存目录:\databasename_log.ldf', -- 日志文件的物理名称
size=数值mb, --日志文件的初始大小
filegrowth=数值%--日志文件的增长值
SQL语句大全删除数据库
drop database databasename
SQL语句大全备份
--- 创建备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始备份
BACKUP DATABASE pubs TO testBack
SQL语句大全创建新表
create table tabname(col1 type1 [not null] [primary key] identity(起始值,递增量)
,col2 type2 [not null],..)--primary key为主键 identity表示递增数量
根据已有的表创建新表:
use 原数据库名
select * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
SQL语句大全创建序列
create sequence SIMON_SEQUENCE
minvalue 1 -- 最小值
maxvalue 999 -- 最大值
start with 1 -- 开始值
increment by 1 -- 每次加几
SQL语句大全删除表
drop table tabname--这是将表连同表中信息一起删除但是日志文件中会有记录
SQL语句大全删除信息
delete from table_name-这是将表中信息删除但是会保留这个表
SQL语句大全增加列
Alter table table_name add column_name column_type [default 默认值]--在表中增加一列,[]内的内容为可选项
SQL语句大全删除列
Alter table table_name drop column column_name--从表中删除一列
SQL语句大全添加主键
Alter table tabname add primary key(col)
说明:删除主键:Alter table tabname drop primary key(col)
SQL语句大全创建索引
create [unique] index idxname on tabname(col…。)
删除索引:drop index idxname on tabname
注:索引是不可更改的,想更改必须删除重新建。
SQL语句大全创建视图
create view viewname as select statement
删除视图:drop view viewname
SQL语句大全基本语句
(1) 数据记录筛选:
sql=&select * from 数据表 where=字段值 order by字段名[desc]&(按某个字段值降序排列。默认升序ASC)
sql=&select * from 数据表 where字段名like '%字段值%' order by 字段名 [desc]&
sql=&select top 10 * from 数据表 where字段名=字段值 order by 字段名 [desc]&
sql=&select top 10 * from 数据表 order by 字段名 [desc]&
sql=&select * from 数据表 wherein ('值1','值2','值3')&
sql=&select * from 数据表 where字段名between 值1 and 值2&
(2) 更新数据记录:
sql=&update 数据表 set字段名=字段值 where 条件表达式&
sql=&update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式&
(3) 删除数据记录:
sql=&delete from 数据表 where 条件表达式&
sql=&delete from 数据表& (将数据表所有记录删除)
(4) 添加数据记录:
sql=&insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)&
sql=&insert into 目标数据表 select * from 源数据表& (把源数据表的记录添加到目标数据表)
(5) 数据记录统计函数:
AVG() 得出一个表格栏平均值
COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql=&select sum() as 别名 from 数据表 where 条件表达式&
set rs=conn.excute(sql)
用 rs(&别名&) 获取统计的值,其它函数运用同上。
查询去除重复值:select distinct * from table1
(6) 数据表的建立和删除:
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
(7) 单列求和:
SELECT SUM(字段名) FROM 数据表
SQL语句大全最新语句
查询数据库中含有同一这字段的表:
select name from sysobjects where xtype = 'u' and id in(select id from syscolumns where name = 's3')
根据出生日期可以算出年龄:
select datediff(year,scrq,'2013') as 年龄 from page_shsjgrgl
根据当前年份自动算出年龄
select datediff(year,csny,cast(YEAR(GETDATE()) as char))
select year(djsj) from page_shsjgrgl
select month(djsj) from page_shsjgrgl
select day(djsj) from page_shsjgrgl
在同一数据库中复制表结构:
select * into a from b where 1&&1
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'aa' 中的标识列插入显式值。
set identity_insert aa ON----设置打开,
批量插入:
insert into aa(Customer_ID, ID_Type, ID_Number) select Customer_ID, ID_Type, ID_Number from TC
set identity_insert aa OFF---关闭
不同数据库之间的复制:
复制结构:
select * into test.dbo.b from GCRT.dbo.page_shsjgrgl where 1&&1
复制内容:
insert into test.dbo.b(xm,ssdq) select xm,ssdq from GCRT.dbo.page_shsjgrgl
查看数据库中所有的数据表表名:
select name from SysObjects where type='u'
查看数据库中所有表含有同一字段的表:
select name from sysobjects where xtype = 'u' and id in(select id from syscolumns where name = '同一字段')
查看数据表中的所有字段:
select name from Syscolumns where id=object_id('表名')
查询数据库时前10条记录:
select top 10 * from td_areacode order by newid()
修改字段类型:
ALTER TABLE 表名 ALTER COLUMN 字段名 varchar(30) NOT NULL
use ZHJIANGJGYL
declare @temp nvarchar(30)
set @temp = 'ZWI4'
select hllx from page_yljg_zyry where hllx not in(
case @temp when ''
then ''
else b1 end
select * from TD_Code where page_en='page_yljg_zyry' and B2='ZWI'
) s where s.b1 !=
case @temp when '' then '' else @temp end
更改数据库表字段类型:
alter table page_shsjgrgl alter column s1 int
SQL语句大全高级查询
UNION 运算符通过组合其他两个结果表(例如TABLE1 和TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随UNION 一起使用时(即UNION ALL),不消除重复行。两种情况下,的每一行不是来自TABLE1 就是来自TABLE2。
B: EXCEPT运算符
EXCEPT 运算符通过包括所有在TABLE1 中但不在TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。
C:INTERSECT
INTERSECT 运算符通过只包括TABLE1 和TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当ALL 随INTERSECT 一起使用时(INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
SQL语句大全外连接
A、left outer join:
左(左连接):既包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
SQL语句大全判断对象
判断数据库是否存在
if exists (select*fromsysdatabaseswherename= '数据库名')
dropdatabase[数据库名]
判断表是否存在
if not exists (select * from sysobjects where [name] = '表名' and xtype='U')
--这里创建表
判断存储过程是否存在
if exists (select*fromsysobjectswhereid = object_id(N'[存储过程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
dropprocedure[名]
判断临时表是否存在
if object_id('tempdb..#临时表名')isnot null
droptable#名
判断视图是否存在
--SQL Server 2000
IF EXISTS (SELECT*FROMsysviewsWHEREobject_id = '[dbo].[视图名]'
--SQL Server 2005
IF EXISTS (SELECT*FROMsys.viewsWHEREobject_id = '[dbo].[视图名]'
判断函数是否存在
if exists (select*fromdbo.sysobjectswhereid = object_id(N'[dbo].[函数名]') and xtype in (N'FN', N'IF', N'TF'))
dropfunction[dbo].[函数名]
获取创建信息
SELECT[name],[id],crdateFROMsysobjectswherextype='U'
xtype 的表示参数类型,通常包括如下这些 C =CHECK约束 D = 默认值或DEFAULT约束 F =FOREIGNKEY约束 L =日志FN =IF = 内嵌表函数 P =PK =PRIMARYKEY约束(类型是K) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR =U = 用户表 UQ =UNIQUE约束(类型是K) V = 视图 X = 扩展存储过程 */
判断列是否存在
if exists(select*fromsyscolumnswhereid=object_id('表名') andname='列名')
altertable表名dropcolumn列名
判断列是否自增列
if columnproperty(object_id('table'),'col','IsIdentity')=1
print '自增列'
print '不是自增列'
SELECT*FROMsys.columnsWHEREobject_id=OBJECT_ID('表名')
AND is_identity=1
判断表中是否存在索引
if exists(select*fromsysindexeswhereid=object_id('表名') andname='索引名')
print '存在'
print '不存在
查看数据库中对象
SELECT*FROMsysobjectsWHEREname='对象名'
select * from table(所要查询的表名) where coloum(条件)
SQL语句大全提升
(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1&&1
法二:select top 0 * into b from a
(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(x, y, z) select d,e,
跨数据库之间表的拷贝
(具体数据使用) (Access可用)
insert into b(x, y, z) select d,e,f from a in ‘具体数据库’ where 条件
例子:。.from b in '&&Server.MapPath(&.&&&\data.mdb& &&' where..
(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b 或者: select a,b,c from a where a IN (1,2,3)
显示文章最后时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
外连接查询
(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
在线视图查询
select * from (Select a,b,c FROM a) T where t.a & 1;
between的用法
between为查询某字段的指定范围,限制查询数据范围时包括了边界值,not between不包括边界值
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
删除主表没有的信息
两张关联表delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1
四表联查问题
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
日程安排提前五分钟
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())&5
一条sql 搞定数据库页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段= a.主键字段 order by a.排序字段
前10条记录
select top 10 * from table1 where 范围
选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等。)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
派生结果表
包括所有在TableA 中但不在TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA except (select a from tableB) except (select a from tableC)
随机取出10条数据
select top 10 * from tablename order by newid()
随机选择记录
select newid()
删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
列出数据库里的表名
select name from sysobjects where type='U'
列出表里的所有的
select name from syscolumns where id=object_id('TableName')
列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
初始化表table1
TRUNCATE TABLE table1
选择从10到15的记录
select top 5 * from (select top10 * from (select top 15 * from table order by id asc) table_别名 order by id desc) table_2 order by id
数据类型转换
declare @numid int
declare @id varchar(50)
set @numid=2005
set @id=convert(varchar,@numid)
通过上述语句完成数据类型Int转换成varchar,其他转换类似,可参看convert函数
SQL语句大全技巧
1=1,1=2的使用
在SQL语句组合时用的较多
“where 1=1”是表示选择全部 “where 1=2”全部不选,
if @strWhere !='
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
我们可以直接写成
set @strSQL='select count(*) as Total from tablename where 1+1'
if(@strWhere!='')
{set @strSQL=@strSQL+’and’+strWhere}
收缩数据库
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE
压缩数据库
dbcc shrinkdatabase(dbname)
转移数据库给新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname'
检查备份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
修复数据库
Alter DATABASE [dvbbs] SET SINGLE_USER
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
Alter DATABASE [dvbbs] SET MULTI_USER
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE tablename -- 要操作的数据库名
Select @LogicalFileName = 'tablename_log', --名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想设定的日志文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
Select @OriginalSize = size
FROM sysfiles
Where name = @LogicalFileName
Select 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
Where name = @LogicalFileName
Create TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
Select @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes & DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (Select size FROM sysfiles Where name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) & @NewSize
BEGIN -- Outer loop.
Select @Counter = 0
WHILE ((@Counter & @OriginalSize / 16) AND (@Counter & 50000))
BEGIN -- update
Insert DummyTrans VALUES ('Fill Log')
Delete DummyTrans
Select @Counter = @Counter + 1
EXEC (@TruncLog)
Select 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
Where name = @LogicalFileName
Drop TABLE DummyTrans
SET NOCOUNT OFF
更改某个表
exec sp_changeobjectowner 'tablename','dbo'
存储更改全部表
Create PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
if @Owner=@OldOwner
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
close curObject
deallocate curObject
循环写入数据
declare @i int
while @i&30
insert into test (userid) values(@i)
set @i=@i+1
清除历史记录关闭

我要回帖

更多关于 sql修改语句怎么写 的文章

 

随机推荐