linux设置mysql/apache开机启动

三 25th, 2011  , ,
0

Comments

推荐采取服务的方式
mysql设为linux服务

cp /usr/local/mysql5/share/mysql/mysql.server /etc/init.d/mysqld
chkconfig –add mysqld
chkconfig –level 2345 mysqld on
chown mysql:mysql -R /usr/local/mysql5/
service mysqld start

1 cd /etc/init.d

2 vi apache2

3 粘贴以下代码

========================================
#!/bin/sh
# description: Apache auto start-stop script.

# chkconfig: – 85 15
APACHE_HOME=/usr/local/apache2
APACHE_OWNER=root
if [ ! -f "$APACHE_HOME/bin/apachectl" ]
then
echo “Apache startup: cannot start”
exit
fi
case “$1″ in
‘start’)
su – $APACHE_OWNER -c “$APACHE_HOME/bin/apachectl start”
;;
‘stop’)
su – $APACHE_OWNER -c “$APACHE_HOME/bin/apachectl stop”
;;
‘restart’)
su – $APACHE_OWNER -c “$APACHE_HOME/bin/apachectl restart”
;;
esac
========================================

4 chmod +x apache2

5 chkconfig –add apache2

6 chkconfig –level 345 apache2 on

7 service apache2 start 启动apache server

8 重新启动Linux,并验证Apache是否随Linux启动

left join造成COUNT会有M*N的问题的解決方式

一 8th, 2009  , , ,
0

Comments

先看例子:
表A
+----+-------+
| id | name |
+----+-------+
| 1 | jason |
| 2 | tom |
| 3 | jack |
| 4 | mathy |
+----+-------+

表log_1
+----+------+
| id | A_id |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 3 |
| 6 | 2 |
+----+------+

表log_2
+----+------+
| id | A_id |
+----+------+
| 1 | 4 |
| 2 | 2 |
| 3 | 3 |
| 4 | 3 |
| 5 | 4 |
| 6 | 1 |
| 7 | 3 |
| 8 | 2 |
+----+------+

想同时查询表A的各条数据在log_1和log_2中的出现次数统计,用以下sql代码查询

SELECT A . * , COUNT( b.id ) AS log_1_num, COUNT( c.id ) AS log_2_num
FROM A
LEFT JOIN log_1 b ON A.id = b.A_id
LEFT JOIN log_2 c ON A.id = c.A_id
GROUP BY A.id

结果如下:

+----+-------+-----------+-----------+
| id | name | log_1_num | log_2_num |
+----+-------+-----------+-----------+
| 1 | jason | 3 | 3 |
| 2 | tom | 4 | 4 |
| 3 | jack | 3 | 3 |
| 4 | mathy | 0 | 2 |
+----+-------+-----------+-----------+

看到此数据第一反映是他肯定有问题,因为log_1_num的总和和log_1表的条数并不相等,仔细看发现是第二次left join的时候将log_2的表里数据与第一次的left join做了笛卡尔乘,所以出现了m*n 的效果,多半都要做 (m*n)/m才能得出正确的数值;

但是看官方的手册里给distinct可以解决次问题,即

SELECT A.*,COUNT(DISTINCT b.id) AS log_1_num,COUNT(DISTINCT c.id) AS log_2_num
FROM A
LEFT JOIN log_1 b ON A.id=b.A_id
LEFT JOIN log_2 c ON A.id=c.A_id
GROUP BY A.id

结果如下,
+----+-------+-----------+-----------+
| id | name | log_1_num | log_2_num |
+----+-------+-----------+-----------+
| 1 | jason | 3 | 1 |
| 2 | tom | 2 | 2 |
| 3 | jack | 1 | 3 |
| 4 | mathy | 0 | 2 |
+----+-------+-----------+-----------+

当然,distinct的查询效率貌似不怎么样,但是这是我想到的比较好的办法了;

当然还有另一种办法,那就是用A表分别和log_1和log_2左关联,然后利用将结果合并,貌似那样也不咋滴吧!

塞班的mysql竟然挂了

一 5th, 2008  , , , , , ,
1

Comments

   诺基亚智能手机使用者应该没有几个不知道塞班的,现在是4:30,我正在在线等证书,回复了一个管理员的留言后就发现数据库连不上鸟……狂汗— —|||

   塞班用的论坛估计也是基于php语言的discuz,具体挂掉的原因还不知道,我咋如此倒霉呀……

Discuz! info: Can not connect to MySQL server

Time: 2008-1-6 4:31am
Script: /pm.php

Error: Lost connection to MySQL server during query
Errno.: 2013

Similar error report has beed dispatched to administrator before.

   但愿他的服务器设置了mysql自动重启……