1 創建poll表,用於記錄單選投票用戶的數據
字段包括 id[ Autoincreace ] , ip , time , iid(用戶選則的選項,int型)
寫出create上述table的完整sql語句drop table if exists poll;
create table poll
(
id int unsigned not null auto_increment,
ip varchar(15) not null,
time datetimenot null,
iid int not null,
primary key (id)
)
2 寫出將一個選擇2號選項的ip為127.0.0.1的用戶在當前時間的投票記錄到數據庫的SQL
insert into poll (ip,time,iid) values(’127.0.0.1′,now(),2);
3 寫出滿足下邊條件的SQL語句
item表的結構為 id(就是poll表中的iid) , descp(用戶選擇的選項的文字)
請查詢並返回10條記錄,包括ip和用戶選擇的選項的文字
4 現在因為投票人數太多,網站時常出現too many connection的錯誤,請提供解決方案
方法一:加大MySql的最大連接數
mysql的最大連接數默認是100, 這個數值對於並發連接很多的數據庫應用是遠遠不夠的,當連接請求大於默認連接數后,就會出現無法連接數據庫的錯誤,因此我們需要把它適當調大一些,編輯my.ini
修改 max_connections=1000
方法二,不用mysql數據庫,改為直接寫文件,詳細方法參照問題5
若非要用 mysql,還可
方法三:由於用mysql語句調用數據庫時,在每次之執行語句前,會做一個臨時的變量用來打開數據庫,所以你在使用mysql語句的時候,記得在每次調用完mysql之后就關閉mysql臨時變量
5 在成功解決連接數的問題后,發現程序運行緩慢,經查發現是mysql並發太多,表被鎖定的現象嚴重,請提供解決方案
對於訪問量大的,本來就不推薦使用數據庫,可以考慮直接寫到文本中,根據預測的訪問量,先定義假若是100個文件文件名依次為1.txt,2.txt…100.txt,每有用戶投票的時候,隨機往其中的一個文件中寫入投票信息。統計的時候,再對所有文本文件中的數據進行分析。必要的時候,再導入數據庫
drop table if exists item;
create table item
(
id int not null,
descp varchar(200) not null,
primary key (id)
);
select A.ip,b.descp
from poll A,item B
where A.id=B.id
limit 10
6 因為用戶實在太多,所以又分配給你兩台服務器,你會如何來安排這3台服務器?
對於服務器分配,其實有好幾種方案(建議采用LINUX主機),先列出一個解決方案。
1. 考慮到電信,網通(南北差異)互訪問速度慢的問題,可以讓電信的用戶走電信的線,網通的走網通的線。大致可以這樣分配,國內南方用戶(電信用戶)擁有一台 服務器A;北方用戶(網通用戶)擁有一台服務器B。國外的用戶也可以考慮給一台服務器C。用戶訪問的時候,首先訪問的是針對國外的服務器,那台機器是電信 網通的用戶訪問速度都差不多的(可以考慮就租用香港或是什么地方的),經過服務器C判斷后直接跳到相應的服務器。統計時三台機器的數據合起來。
7 現在開始要求同一ip不能重復投票 ,請指出如何對數據表進行相應的修改
ALTER TABLE `phpinterview`.`poll` ADD unique INDEX `IX_poll_ip`(`ip`);
8. 原有數據已經有很多重復ip的數據了,所以我們把它導出為一個txt,格式和上邊的poll一致,用TAB鍵間隔,請寫一段程序,刪除ip有重復的記錄,並統計每個投票選項的投票數
<?php
//讀取文本並放入數組
$apoll = file("c:\1.txt");
//對每一行數據進行分割,從而獲取了一個二維數組
for ($i=0;$i<count($apoll);$i++)
{
$poll[$i] = split(" ",$apoll[$i]);
}
//獲取IP、出現的次數數據
$arrIP=array();
for($i=0;$i<count($poll);$i++)
{
$arrIP[$poll[$i][1]]=isset($arrIP[$poll[$i][1]])?$arrIP[$poll[$i][1]]+1:1;
}
//獲取選項、投票個數
$arrRes=array();
for($i=0;$i<count($poll);$i++)
{
if($arrIP[$poll[$i][1]]==1)
{
$arrRes[$poll[$i][3]]=isset($arrRes[$poll[$i][3]])?$arrRes[$poll[$i][3]]+1:1;
}
}
var_dump($arrRes);
?>
mysql5.0測試版:
SELECT *
into outfile ‘c: .txt’
FROM `testok`;
create TABLE phpinterview.testok(id int,ip varchar(15),time datetime,iid int);
LOAD DATA INFILE ‘c: .txt’
into table testok;
delete A from testok A,(select ip from testok B group by ip having count(*) >1) B
where A.ip=B.ip
select iid,count(*) from testok B group by B.iid
字段包括 id[ Autoincreace ] , ip , time , iid(用戶選則的選項,int型)
寫出create上述table的完整sql語句drop table if exists poll;
create table poll
(
id int unsigned not null auto_increment,
ip varchar(15) not null,
time datetimenot null,
iid int not null,
primary key (id)
)
2 寫出將一個選擇2號選項的ip為127.0.0.1的用戶在當前時間的投票記錄到數據庫的SQL
insert into poll (ip,time,iid) values(’127.0.0.1′,now(),2);
3 寫出滿足下邊條件的SQL語句
item表的結構為 id(就是poll表中的iid) , descp(用戶選擇的選項的文字)
請查詢並返回10條記錄,包括ip和用戶選擇的選項的文字
4 現在因為投票人數太多,網站時常出現too many connection的錯誤,請提供解決方案
方法一:加大MySql的最大連接數
mysql的最大連接數默認是100, 這個數值對於並發連接很多的數據庫應用是遠遠不夠的,當連接請求大於默認連接數后,就會出現無法連接數據庫的錯誤,因此我們需要把它適當調大一些,編輯my.ini
修改 max_connections=1000
方法二,不用mysql數據庫,改為直接寫文件,詳細方法參照問題5
若非要用 mysql,還可
方法三:由於用mysql語句調用數據庫時,在每次之執行語句前,會做一個臨時的變量用來打開數據庫,所以你在使用mysql語句的時候,記得在每次調用完mysql之后就關閉mysql臨時變量
5 在成功解決連接數的問題后,發現程序運行緩慢,經查發現是mysql並發太多,表被鎖定的現象嚴重,請提供解決方案
對於訪問量大的,本來就不推薦使用數據庫,可以考慮直接寫到文本中,根據預測的訪問量,先定義假若是100個文件文件名依次為1.txt,2.txt…100.txt,每有用戶投票的時候,隨機往其中的一個文件中寫入投票信息。統計的時候,再對所有文本文件中的數據進行分析。必要的時候,再導入數據庫
drop table if exists item;
create table item
(
id int not null,
descp varchar(200) not null,
primary key (id)
);
select A.ip,b.descp
from poll A,item B
where A.id=B.id
limit 10
6 因為用戶實在太多,所以又分配給你兩台服務器,你會如何來安排這3台服務器?
對於服務器分配,其實有好幾種方案(建議采用LINUX主機),先列出一個解決方案。
1. 考慮到電信,網通(南北差異)互訪問速度慢的問題,可以讓電信的用戶走電信的線,網通的走網通的線。大致可以這樣分配,國內南方用戶(電信用戶)擁有一台 服務器A;北方用戶(網通用戶)擁有一台服務器B。國外的用戶也可以考慮給一台服務器C。用戶訪問的時候,首先訪問的是針對國外的服務器,那台機器是電信 網通的用戶訪問速度都差不多的(可以考慮就租用香港或是什么地方的),經過服務器C判斷后直接跳到相應的服務器。統計時三台機器的數據合起來。
7 現在開始要求同一ip不能重復投票 ,請指出如何對數據表進行相應的修改
ALTER TABLE `phpinterview`.`poll` ADD unique INDEX `IX_poll_ip`(`ip`);
8. 原有數據已經有很多重復ip的數據了,所以我們把它導出為一個txt,格式和上邊的poll一致,用TAB鍵間隔,請寫一段程序,刪除ip有重復的記錄,並統計每個投票選項的投票數
<?php
//讀取文本並放入數組
$apoll = file("c:\1.txt");
//對每一行數據進行分割,從而獲取了一個二維數組
for ($i=0;$i<count($apoll);$i++)
{
$poll[$i] = split(" ",$apoll[$i]);
}
//獲取IP、出現的次數數據
$arrIP=array();
for($i=0;$i<count($poll);$i++)
{
$arrIP[$poll[$i][1]]=isset($arrIP[$poll[$i][1]])?$arrIP[$poll[$i][1]]+1:1;
}
//獲取選項、投票個數
$arrRes=array();
for($i=0;$i<count($poll);$i++)
{
if($arrIP[$poll[$i][1]]==1)
{
$arrRes[$poll[$i][3]]=isset($arrRes[$poll[$i][3]])?$arrRes[$poll[$i][3]]+1:1;
}
}
var_dump($arrRes);
?>
mysql5.0測試版:
SELECT *
into outfile ‘c: .txt’
FROM `testok`;
create TABLE phpinterview.testok(id int,ip varchar(15),time datetime,iid int);
LOAD DATA INFILE ‘c: .txt’
into table testok;
delete A from testok A,(select ip from testok B group by ip having count(*) >1) B
where A.ip=B.ip
select iid,count(*) from testok B group by B.iid
