添加修改删除后,使用一条SQL语句更新分类表中对应的用户总数count()

-----------------------------------------

select a.id ,ifnull(b.cnt,0) as cnt from bc_company as a left join (
	select company_id,count(company_id) as cnt from bc_user where status = 1 group by company_id
) as b on a.id = b. company_id


-------------------------------------------------------
update bc_company a,(
	select a.id ,ifnull(b.cnt,0) as cnt from bc_company as a left join (
		select company_id,count(company_id) as cnt from bc_user where status = 1 group by company_id
	) as b on a.id = b. company_id
)b 
set a.user_count=b.cnt where a.id=b.id;

-------------------------------------------------------

mysql 多表关联删除 MySQL跨表关联删除 MySQL根据查询条件删除多表数据

两张表关联删除:

DELETE a,b FROM table1 a
INNER JOIN  table2 b
ON a.id = b.aid
WHERE a.id = '1'
//或者也可以
DELETE a,b FROM table1 a,table2 b
WHERE a.id = b.aid
AND a.id = '1'
 阅读详细 »

MySQL触发器使用详解

MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。

创建触发器
在MySQL中,创建触发器语法如下:

代码如下:


CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt

阅读详细 »

mysql结果集加序号问题?

mysql结果集加序号问题?
如何在mysql查询后的结果集前加序列,类似oracle的rownum?

首先给出解决方案:
–通过一个初始值为0的变量@rownum,依次递增1来实现行号

SELECT
    @rownum:=@rownum+1 AS rownum,name
FROM temp,
    (SELECT @rownum:=0) temp
WHERE @rownum<4;

给出一般性的语句:

SELECT
    @rownum:=@rownum+1 AS rownum,所需字段
FROM 表名,
    (SELECT @rownum:=0) 表名
WHERE @rownum<N(获取多少行);

然后给出测试案例:
第一步,创建测试表;

mysql> CREATE TABLE temp(id INT(4),name VARCHAR(20));
Query OK, 0 rows affected (0.13 sec)

第二步,插入测试数据;

mysql> INSERT INTO temp VAlUES(1,'robin');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO temp VAlUES(2,'wentasy');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO temp VAlUES(3,'justdb');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO temp VAlUES(4,'wen');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO temp SELECT * FROM temp;
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> INSERT INTO temp SELECT * FROM temp;
Query OK, 8 rows affected (0.02 sec)
Records: 8  Duplicates: 0  Warnings: 0

mysql> INSERT INTO temp SELECT * FROM temp;
Query OK, 16 rows affected (0.02 sec)
Records: 16  Duplicates: 0  Warnings: 0

mysql> INSERT INTO temp SELECT * FROM temp;
Query OK, 32 rows affected (0.03 sec)
Records: 32  Duplicates: 0  Warnings: 0

mysql> INSERT INTO temp SELECT * FROM temp;
Query OK, 64 rows affected (0.04 sec)
Records: 64  Duplicates: 0  Warnings: 0

mysql> INSERT INTO temp SELECT * FROM temp;
Query OK, 128 rows affected (0.03 sec)
Records: 128  Duplicates: 0  Warnings: 0

mysql> INSERT INTO temp SELECT * FROM temp;
Query OK, 256 rows affected (0.04 sec)
Records: 256  Duplicates: 0  Warnings: 0

mysql> INSERT INTO temp SELECT * FROM temp;
Query OK, 512 rows affected (0.05 sec)
Records: 512  Duplicates: 0  Warnings: 0

mysql> INSERT INTO temp SELECT * FROM temp;
Query OK, 1024 rows affected (0.05 sec)
Records: 1024  Duplicates: 0  Warnings: 0

第三步,实现类似Oracle中的rownum效果;
mysql> SELECT
    ->     @rownum:=@rownum+1 AS rownum,name
    -> FROM temp,
    ->     (SELECT @rownum:=0) temp
    -> WHERE @rownum<4;
+--------+---------+
| rownum | name    |
+--------+---------+
|      1 | robin   |
|      2 | wentasy |
|      3 | justdb  |
|      4 | wen     |
+--------+---------+
4 rows in set (0.01 sec)

mysql查询结果添加序列号的方法

第一种方法:
复制代码 代码如下:

select (@i:=@i+1) as i,table_name.* from table_name,(select @i:=0) as it

第二种方法:

set @rownum=0;
select @rownum:=@rownum+1 as rownum, t.username from auth_user t limit 1,5;

Discuz!无法安装的解决方案(数据库原因MySQL5.5)

Discuz 在数据库MySQL5.5环境下,无法安装。

问题是 Discuz 使用的是老版本的MySQL。

由于新版的MySQL中使用ENGINE并放弃了TYPE函数,因此您需要按照以下步骤来安装Discuz!

    1、 将程序解压并上传至服务器;

    2、 用文本编辑器或其他编辑软件打开/install/data/install.sql文件;

    3、 将其中所有的TYPE=替换为ENGINE=;

    4、 在浏览器运行安装文件。

这样您就能顺利安装Discuz了。

wampserver虚拟主机配置httpd-vhosts.conf

NameVirtualHost *:80

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.localhost
DocumentRoot “D:\wamp\www”
ServerName localhost
ServerAlias localhost
ErrorLog “logs/dummy-host.localhost-error.log”
CustomLog “logs/dummy-host.localhost-access.log” common
</VirtualHost>

#
# 如果目录在 D:\wamp\www 下因为 D:\wamp\www 已经设置过权限了 所以 可以不用设置 <Directory “D:\webroot” >
# 否者需要 像下边的例子 设置 目录权限 <Directory “D:\webroot” >
#
<VirtualHost *:80>
ServerName 127.0.0.5
ServerAlias 127.0.0.6
ServerAdmin webmaster@dummy-host.localhost
DocumentRoot “D:\webroot”

ErrorLog “logs/dummy-host.localhost-error.log”
CustomLog “logs/dummy-host.localhost-access.log” common

<Directory “D:\webroot” >
    Options Indexes FollowSymLinks
  AllowOverride all
    Order Deny,Allow
Allow from all
</Directory>

</VirtualHost>

phpmyadmin导入超大sql文件的方法

phpmyadmin备份下来的SQL文件有50多M,但是phpmyadmin不支持超过24M的sql文件导入。另外文件过大,通常web上传文件大小也有限制,从本地浏览上传导入,容易中断失败,有没有更好的方法呢?

如果你有服务器操作权限,你就可以先把sql上传到服务器上,因为phpmyadmin支持从服务器端读取sql文件然后导入。

可以先将超大的SQL文件先传到你的phpmyadmin文件夹内,然后按以下方法设置

在phpmyadmin中导入很大很大的数据
找到config.inc.php
编辑它

$cfg[‘UploadDir’] = ‘你指定的文件夹路径‘;

例如:

/*
 * Directories for saving/loading files from server
 */
$cfg['UploadDir'] = 'UploadDir';
$cfg['SaveDir'] = '';

然后在phpmyadmin新建这个目录UploadDir
将sql放进来
然后你再选择导入的时候就会有个选项了
然后你选择导入
我测试过.没问题
如果没找到config.inc.php
那就找config.inc.***.php
然后将这个文件修改成config.inc.php

No data was received to import…MYSQL数据库过大问题的完美解决方法

用phpmyadmin导入大数据库的时候经常出现:

No data was received to import. Either no file name was submitted, or the file size exceeded the maximum size permitted by your PHP configuration. See FAQ 1.16.

 

这是因为php无法上传大文件照成的,解决这个问题可以有2中方法:

方法一:修改php上传文件的大小限制

首先检查php.ini配置文件中的以下三个变量

upload_max_filesize,
memory_limit ,
post_max_size,

初始大小分别为2M,8M,8M,修改的数字尽量大于原来的数字,但不可过大,以防占用服务器资源。

修改了以上三个在php.ini中的值以后,重启了Apache,再次打开phpmyadmin导入时,虽然phpmyadmin还是显示导入最大限制:20,48KB,但是导入大的数据库文件已经能成功了。

该方法本人不推荐,因为这样有的时候即使你修改了上传文件大小限制,也会因为上传时间过长而失败.

——————————————————–

方法二:修改phpmyadmin 配置 ,让phpmyadmin从服务器选择sql文件。

具体操作过程如下:

1.在 phpmyadmin目录里新建一个目录 upload.
2.打开phpmyadmin,找到config.inc.php文件,打开在里面修改 $cfg[‘UploadDir’] = “upload”; 然后保存
3.用 FTP软件上传需要导入的sql 文件到 phpmyadmin/upload/ 下
4.访问 phpmyadmin,点击 Import(导入) ,就会出现选择服务器上的文件的下拉框,选择刚才用FTP上传的SQL文件。

至此完美解决。