<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Set cn = CreateObject("ADODB.Connection")
    strCn = "driver=MySQL ODBC 5.1 Driver;" & _
            "server=192.168.1.40;" & _
            "database=bingotest;" & _
            "uid=ks;" & _
            "pwd=23092342"
            cn.Open strCn
    posted @ 2009-01-19 11:02 肖馬輝 閱讀(279) | 評論 (0)編輯 收藏
     
    最近由于需要大概研究了一下MYSQL的隨機(jī)抽取實(shí)現(xiàn)方法。舉個例子,要從tablename表中隨機(jī)提取一條記錄,大家一般的寫法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。

    但是,后來我查了一下MYSQL的官方手冊,里面針對RAND()的提示大概意思就是,在ORDER BY從句里面不能使用RAND()函數(shù),因?yàn)檫@樣會導(dǎo)致數(shù)據(jù)列被多次掃描。但是在MYSQL 3.23版本中,仍然可以通過ORDER BY RAND()來實(shí)現(xiàn)隨機(jī)。

    但是真正測試一下才發(fā)現(xiàn)這樣效率非常低。一個15萬余條的庫,查詢5條數(shù)據(jù),居然要8秒以上。查看官方手冊,也說rand()放在ORDER BY 子句中會被執(zhí)行多次,自然效率及很低。
    You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.
    搜索Google,網(wǎng)上基本上都是查詢max(id) * rand()來隨機(jī)獲取數(shù)據(jù)。
    SELECT *
    FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
    WHERE t1.id >= t2.id
    ORDER BY t1.id ASC LIMIT 5;

    但是這樣會產(chǎn)生連續(xù)的5條記錄。解決辦法只能是每次查詢一條,查詢5次。即便如此也值得,因?yàn)?5萬條的表,查詢只需要0.01秒不到。

    下面的語句采用的是JOIN,mysql的論壇上有人使用
    SELECT *
    FROM `table`
    WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
    ORDER BY id LIMIT 1;

    我測試了一下,需要0.5秒,速度也不錯,但是跟上面的語句還是有很大差距。總覺有什么地方不正常。

    于是我把語句改寫了一下。
    SELECT * FROM `table`
    WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))
    ORDER BY id LIMIT 1;

    這下,效率又提高了,查詢時間只有0.01秒

    最后,再把語句完善一下,加上MIN(id)的判斷。我在最開始測試的時候,就是因?yàn)闆]有加上MIN(id)的判斷,結(jié)果有一半的時間總是查詢到表中的前面幾行。
    完整查詢語句是:
    SELECT * FROM `table`
    WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))
    ORDER BY id LIMIT 1;

    SELECT *
    FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2
    WHERE t1.id >= t2.id
    ORDER BY t1.id LIMIT 1;

    最后在php中對這兩個語句進(jìn)行分別查詢10次,
    前者花費(fèi)時間 0.147433 秒
    后者花費(fèi)時間 0.015130 秒
    看來采用JOIN的語法比直接在WHERE中使用函數(shù)效率還要高很多。
    posted @ 2008-12-12 16:13 肖馬輝 閱讀(208) | 評論 (0)編輯 收藏
     
    一、什么是索引?

      索引用來快速地尋找那些具有特定值的記錄,所有MySQL索引都以B-樹的形式保存。如果沒有索引,執(zhí)行查詢時MySQL必須從第一個記錄開始掃描整個表的所有記錄,直至找到符合要求的記錄。表里面的記錄數(shù)量越多,這個操作的代價就越高。如果作為搜索條件的列上已經(jīng)創(chuàng)建了索引,MySQL無需掃描任何記錄即可迅速得到目標(biāo)記錄所在的位置。如果表有1000個記錄,通過索引查找記錄至少要比順序掃描記錄快100倍。

      假設(shè)我們創(chuàng)建了一個名為people的表:

      CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL );

      然后,我們完全隨機(jī)把1000個不同name值插入到people表。在數(shù)據(jù)文件中name 列沒有任何明確的次序。如果我們創(chuàng)建了name列的索引,MySQL將在索引中排序name列,對于索引中的每一項(xiàng),MySQL在內(nèi)部為它保存一個數(shù)據(jù)文件中實(shí)際記錄所在位置的“指針”。因此,如果我們要查找name等于“Mike”記錄的peopleid(SQL命令為“SELECT peopleid FROM people WHERE name='Mike';”),MySQL能夠在name的索引中查找“Mike”值,然后直接轉(zhuǎn)到數(shù)據(jù)文件中相應(yīng)的行,準(zhǔn)確地返回該行的 peopleid(999)。在這個過程中,MySQL只需處理一個行就可以返回結(jié)果。如果沒有“name”列的索引,MySQL要掃描數(shù)據(jù)文件中的所有記錄,即1000個記錄!顯然,需要MySQL處理的記錄數(shù)量越少,則它完成任務(wù)的速度就越快。

      二、索引的類型

      MySQL提供多種索引類型供選擇:

      普通索引 :

      這是最基本的索引類型,而且它沒有唯一性之類的限制。普通索引可以通過以下幾種方式創(chuàng)建:

      創(chuàng)建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);

      修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);

      創(chuàng)建表的時候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

      唯一性索引:

      這種索引和前面的“普通索引”基本相同,但有一個區(qū)別:索引列的所有值都只能出現(xiàn)一次,即必須唯一。唯一性索引可以用以下幾種方式創(chuàng)建:

      創(chuàng)建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);

      修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);

      創(chuàng)建表的時候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );

      主鍵 :

      主鍵是一種唯一性索引,但它必須指定為“PRIMARY KEY”。如果你曾經(jīng)用過AUTO_INCREMENT類型的列,你可能已經(jīng)熟悉主鍵之類的概念了。主鍵一般在創(chuàng)建表的時候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我們也可以通過修改表的方式加入主鍵,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每個表只能有一個主鍵。

      全文索引:

      MySQL從3.23.23版開始支持全文索引和全文檢索。在MySQL中,全文索引的索引類型為FULLTEXT。全文索引可以在VARCHAR或者TEXT類型的列上創(chuàng)建。它可以通過CREATE TABLE命令創(chuàng)建,也可以通過ALTER TABLE或CREATE INDEX命令創(chuàng)建。對于大規(guī)模的數(shù)據(jù)集,通過ALTER TABLE(或者CREATE INDEX)命令創(chuàng)建全文索引要比把記錄插入帶有全文索引的空表更快。本文下面的討論不再涉及全文索引,要了解更多信息,請參見MySQL documentation。

      三、單列索引與多列索引

      索引可以是單列索引,也可以是多列索引。下面我們通過具體的例子來說明這兩種索引的區(qū)別。假設(shè)有這樣一個people表:

      CREATE TABLE people ( peopleid SMALLINT NOT NULL AUTO_INCREMENT,firstname CHAR(50) NOT NULL, lastname CHAR(50) NOT NULL, age SMALLINT NOT NULL,townid SMALLINT NOT NULL, PRIMARY KEY (peopleid) );

      下面是我們插入到這個people表的數(shù)據(jù):

      這個數(shù)據(jù)片段中有四個名字為“Mikes”的人(其中兩個姓Sullivans,兩個姓McConnells),有兩個年齡為17歲的人,還有一個名字與眾不同的Joe Smith。

      這個表的主要用途是根據(jù)指定的用戶姓、名以及年齡返回相應(yīng)的peopleid。例如,我們可 能需要查找姓名為Mike Sullivan、年齡17歲用戶的peopleid(SQL命令為SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age=17;)。由于我們不想讓MySQL每次執(zhí)行查詢就去掃描整個表,這里需要考慮運(yùn)用索引。

      首先,我們可以考慮在單個列上創(chuàng)建索引,比如firstname、lastname或者 age列。如果我們創(chuàng)建firstname列的索引(ALTER TABLE people ADD INDEX firstname (firstname);),MySQL將通過這個索引迅速把搜索范圍限制到那些firstname='Mike'的記錄,然后再在這個“中間結(jié)果集”上進(jìn)行其他條件的搜索:它首先排除那些lastname不等于“Sullivan”的記錄,然后排除那些age不等于17的記錄。當(dāng)記錄滿足所有搜索條件之后,MySQL就返回最終的搜索結(jié)果。

      由于建立了firstname列的索引,與執(zhí)行表的完全掃描相比,MySQL的效率提高了很多,但我們要求MySQL掃描的記錄數(shù)量仍舊遠(yuǎn)遠(yuǎn)超過了實(shí)際所需要的。雖然我們可以刪除firstname列上的索引,再創(chuàng)建lastname或者age 列的索引,但總地看來,不論在哪個列上創(chuàng)建索引搜索效率仍舊相似。

      為了提高搜索效率,我們需要考慮運(yùn)用多列索引。如果為firstname、lastname和age這三個列創(chuàng)建一個多列索引,MySQL只需一次檢索就能夠找出正確的結(jié)果!下面是創(chuàng)建這個多列索引的SQL命令:

      ALTER TABLE people ADD INDEX fname_lname_age (firstname,lastname,age);

      由于索引文件以B-樹格式保存,MySQL能夠立即轉(zhuǎn)到合適的firstname,然后再轉(zhuǎn)到合適的lastname,最后轉(zhuǎn)到合適的age。在沒有掃描數(shù)據(jù)文件任何一個記錄的情況下,MySQL就正確地找出了搜索的目標(biāo)記錄!

      那么,如果在firstname、lastname、age這三個列上分別創(chuàng)建單列索引,效果是否和創(chuàng)建一個firstname、lastname、age的多列索引一樣呢?答案是否定的,兩者完全不同。當(dāng)我們執(zhí)行查詢的時候,MySQL只能使用一個索引。如果你有三個單列的索引,MySQL會試圖選擇一個限制最嚴(yán)格的索引。但是,即使是限制最嚴(yán)格的單列索引,它的限制能力也肯定遠(yuǎn)遠(yuǎn)低于 firstname、lastname、age這三個列上的多列索引。

      四、最左前綴

      多列索引還有另外一個優(yōu)點(diǎn),它通過稱為最左前綴(Leftmost Prefixing)的概念體現(xiàn)出來。繼續(xù)考慮前面的例子,現(xiàn)在我們有一個firstname、lastname、age列上的多列索引,我們稱這個索引為fname_lname_age。當(dāng)搜索條件是以下各種列的組合時,MySQL將使用fname_lname_age索引:

      firstname,lastname,agefirstname,lastnamefirstname

      從另一方面理解,它相當(dāng)于我們創(chuàng)建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)這些列組合上的索引。下面這些查詢都能夠使用這個fname_lname_age索引:

      SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age='17'; SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan'; SELECT peopleid FROM people WHERE firstname='Mike'; The following queries cannot use the index at all: SELECT peopleid FROM people WHERE lastname='Sullivan'; SELECT peopleid FROM people WHERE age='17'; SELECT peopleid FROM people WHERE lastname='Sullivan' AND age='17';

      五、選擇索引列

      在性能優(yōu)化過程中,選擇在哪些列上創(chuàng)建索引是最重要的步驟之一。可以考慮使用索引的主要有兩種類型的列:在WHERE子句中出現(xiàn)的列,在join子句中出現(xiàn)的列。請看下面這個查詢:

      SELECT age ## 不使用索引FROM people WHERE firstname='Mike' ## 考慮使用索引AND lastname='Sullivan' ## 考慮使用索引

      這個查詢與前面的查詢略有不同,但仍屬于簡單查詢。由于age是在SELECT部分被引用,MySQL不會用它來限制列選擇操作。因此,對于這個查詢來說,創(chuàng)建age列的索引沒有什么必要。下面是一個更復(fù)雜的例子:

      SELECT people.age, ##不使用索引town.name ##不使用索引FROM people LEFT JOIN town ONpeople.townid=town.townid ##考慮使用索引WHERE firstname='Mike' ##考慮使用索引AND lastname='Sullivan' ##考慮使用索引

      與前面的例子一樣,由于firstname和lastname出現(xiàn)在WHERE子句中,因此這兩個列仍舊有創(chuàng)建索引的必要。除此之外,由于town表的townid列出現(xiàn)在join子句中,因此我們需要考慮創(chuàng)建該列的索引。那么,我們是否可以簡單地認(rèn)為應(yīng)該索引WHERE子句和join子句中出現(xiàn)的每一個列呢?差不多如此,但并不完全。我們還必須考慮到對列進(jìn)行比較的操作符類型。MySQL只有對以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE。可以在LIKE操作中使用索引的情形是指另一個操作數(shù)不是以通配符(%或者_(dá))開頭的情形。例如,“SELECT peopleid FROM people WHERE firstname LIKE 'Mich%';”這個查詢將使用索引,但“SELECT peopleid FROM people WHERE firstname LIKE '%ike';”這個查詢不會使用索引。

    posted @ 2008-12-12 09:49 肖馬輝 閱讀(513) | 評論 (0)編輯 收藏
     
    我們要把現(xiàn)實(shí)世界中的各種信息轉(zhuǎn)換成計算機(jī)能理解的東西,這些轉(zhuǎn)換后的信息就形成了數(shù)據(jù)。例如,某人的出生日期是“1987年5月23日”,他的身高是170厘米,等等。數(shù)據(jù)不僅包括數(shù)字、字母、文字和其他特殊字符組成的文本形式的數(shù)據(jù),而且還包括圖形、圖像、動畫、影像、聲音等多媒體數(shù)據(jù)。但使用最多、最基本的仍然是文本數(shù)據(jù)。

          1. mysql的數(shù)據(jù)類型

          在mysql中有如下幾種數(shù)據(jù)類型:

          (1)數(shù)值型

          數(shù)值是諸如32 或153.4 這樣的值。mysql 支持科學(xué)表示法,科學(xué)表示法由整數(shù)或浮點(diǎn)數(shù)后跟“e”或“e”、一個符號(“+”或“-”)和一個整數(shù)指數(shù)來表示。1.24e+12 和23.47e-1 都是合法的科學(xué)表示法表示的數(shù)。而1.24e12 不是合法的,因?yàn)橹笖?shù)前的符號未給出。

          浮點(diǎn)數(shù)由整數(shù)部分、一個小數(shù)點(diǎn)和小數(shù)部分組成。整數(shù)部分和小數(shù)部分可以分別為空,但不能同時為空。

          數(shù)值前可放一個負(fù)號“-”以表示負(fù)值。

          (2)字符(串)型

          字符型(也叫字符串型,簡稱串)是諸如“hello, world!”或“一個饅頭引起的血案”這樣的值,或者是電話號碼87398413這樣的值。既可用單引號也可用雙引號將串值括起來。

          初學(xué)者往往分不清數(shù)值87398143和字符串87398143的區(qū)別。都是數(shù)字啊,怎么一個要用數(shù)值型,一個要用字符型呢?關(guān)鍵就在于:數(shù)值型的87398143是要參與計算的,比如它是金融中的一個貨款總額;而字符型的87398143是不參與計算的,只是表示電話號碼,這樣的還有街道號碼、門牌號碼等等,它們都不參與計算。

          (3)日期和時間型

          日期和時間是一些諸如“2006-07-12”或“12:30:43”這樣的值。mysql還支持日期/時間的組合,如“2006-07-12 12:30:43”。

          (4)null值

          null表示未知值。比如填寫表格中通訊地址不清楚留空不填寫,這就是null值。

          我們用create table語句創(chuàng)建一個表(參看前面的章節(jié)),這個表中包含列的定義。例如我們在前面創(chuàng)建了一個joke表,這個表中有content和writer兩個列:  

     

      

         定義一個列的語法如下:

    create table

    (

    content varchar(20) not null,

    writer varchar(10) null

    )

    col_name col_typy [col_attributes] [general_attributes]

     

     

         其中列名由col_name 給出。列名可最多包含64個字符,字符包括字母、數(shù)字、下劃線及美元符號。列名可以名字中合法的任何符號(包括數(shù)字)開頭。但列名不能完全由數(shù)字組成,因?yàn)槟菢涌赡苁蛊渑c數(shù)據(jù)分不開。mysql保留諸如select、delete和create這樣的詞,這些詞不能用做列名,但是函數(shù)名(如pos 和min)是可以使用的。

          列類型col_type表示列可存儲的特定值。列類型說明符還能表示存放在列中的值的最大長度。對于某些類型,可用一個數(shù)值明確地說明其長度。而另外一些值,其長度由類型名蘊(yùn)含。例如,char(10) 明確指定了10個字符的長度,而tinyblob值隱含最大長度為255個字符。有的類型說明符允許指定最大的顯示寬度(即顯示值時使用多少個字符)。浮點(diǎn)類型允許指定小數(shù)位數(shù),所以能控制浮點(diǎn)數(shù)的精度值為多少。

          可以在列類型之后指定可選的類型說明屬性,以及指定更多的常見屬性。屬性起修飾類型的作用,并更改其處理列值的方式,屬性有以下類型:

          (1)專用屬性用于指定列。例如,unsigned 屬性只針對整型,而binary屬性只用于char 和varchar。

          (2)通用屬性除少數(shù)列之外可用于任意列。可以指定null 或not null 以表示某個列是否能夠存放null。還可以用default,def_value 來表示在創(chuàng)建一個新行但未明確給出該列的值時,該列可賦予值def_value。def_value 必須為一個常量;它不能是表達(dá)式,也不能引用其他列。不能對blob 或text 列指定缺省值。

          如果想給出多個列的專用屬性,可按任意順序指定它們,只要它們跟在列類型之后、通用屬性之前即可。類似地,如果需要給出多個通用屬性,也可按任意順序給出它們,只要將它們放在列類型和可能給出的列專用屬性之后即可。

          2. mysql的列(字段)類型

          數(shù)據(jù)庫中的每個表都是由一個或多個列(字段)構(gòu)成的。在用create table語句創(chuàng)建一個表時,要為每列(字段)指定一個類型。列(字段)的類型比數(shù)據(jù)類型更為細(xì)化,它精確地描述了給定表列(字段)可能包含的值的種類,如是否帶小數(shù)、是否文字很多。

          2.1數(shù)值列類型

          mysql有整數(shù)和浮點(diǎn)數(shù)值的列類型,如表1所示。整數(shù)列類型可以有符號也可無符號。有一種特殊的屬性允許整數(shù)列值自動生成,這對需要唯一序列或標(biāo)識號的應(yīng)用系統(tǒng)來說是非常有用的。

    類型

    說明

    tinyint

    非常小的整數(shù)

    smallint

    較小整數(shù)

    mediumint

    中等大小整數(shù)

    int

    標(biāo)準(zhǔn)整數(shù)

    bigint

    較大整數(shù)

    float

    單精度浮點(diǎn)數(shù)

    double

    雙精度浮點(diǎn)數(shù)

    decimal

    一個串的浮點(diǎn)數(shù)

    表1:數(shù)值列類型

          每種數(shù)值類型的名稱和取值范圍如表2所示。

    類型說明

    取值范圍

    tinyint[(m)]

    有符號值:-128 到127(- 27 到27 - 1)

    無符號值:0到255(0 到28 - 1)         1個字節(jié)

    smallint[(m)]

    有符號值:-32768 到32767(- 215 到215 - 1)

    無符號值:0到65535(0 到21 6 - 1)        2個字節(jié)

    mediumint[(m)]

    有符號值:-8388608 到8388607(- 22 3 到22 3 - 1 )

    無符號值:0到16777215(0 到22 4 - 1)          3個字節(jié)

    int[(m)]

    有符號值:-2147683648 到2147683647(- 231 到231- 1)

    無符號值:0到4294967295(0 到232 - 1)   4個字節(jié)

    bigint[(m)]

    有符號值:-9223372036854775808 到9223373036854775807(- 263到263-1)

    無符號值:0到18446744073709551615(0到264 – 1) 8個字節(jié)

    float[(m, d)]

    最小非零值:±1.175494351e - 38

    double[(m,d)]

    最小非零值:±2.2250738585072014e - 308

    decimal (m, d)

    可變;其值的范圍依賴于m 和d

    表2:數(shù)值列類型的取值范圍

          各種類型值所需的存儲量如表3所示。

    類型說明

    存儲需求

    tinyint[(m)]

    1字節(jié)

    smallint[(m)]

    2字節(jié)

    mediumint[(m)]

    3字節(jié)

    int[(m)]

    4字節(jié)

    bigint[(m)]

    8字節(jié)

    float[(m, d)]

    4字節(jié)

    double[(m, d)]

    8字節(jié)

    decimal (m, d)

    m字節(jié)(mysql < 3.23),m+2字節(jié)(mysql > 3.23 )

    表3:數(shù)值列類型的存儲需求

    mysql提供了五種整型: tinyint、smallint、mediumint、int和bigint。int為integer的縮寫。這些類型在可表示的取值范圍上是不同的。整數(shù)列可定義為unsigned從而禁用負(fù)值;這使列的取值范圍為0以上。各種類型的存儲量需求也是不同的。取值范圍較大的類型所需的存儲量較大。

          mysql 提供三種浮點(diǎn)類型: float、double和decimal。與整型不同,浮點(diǎn)類型不能是unsigned的,其取值范圍也與整型不同,這種不同不僅在于這些類型有最大值,而且還有最小非零值。最小值提供了相應(yīng)類型精度的一種度量,這對于記錄科學(xué)數(shù)據(jù)來說是非常重要的(當(dāng)然,也有負(fù)的最大和最小值)。

          在選擇了某種數(shù)值類型時,應(yīng)該考慮所要表示的值的范圍,只需選擇能覆蓋要取值的范圍的最小類型即可。選擇較大類型會對空間造成浪費(fèi),使表不必要地增大,處理起來沒有選擇較小類型那樣有效。對于整型值,如果數(shù)據(jù)取值范圍較小,如人員年齡或兄弟姐妹數(shù),則tinyint最合適。mediumint能夠表示數(shù)百萬的值并且可用于更多類型的值,但存儲代價較大。bigint在全部整型中取值范圍最大,而且需要的存儲空間是表示范圍次大的整型int類型的兩倍,因此只在確實(shí)需要時才用。對于浮點(diǎn)值,double占用float的兩倍空間。除非特別需要高精度或范圍極大的值,一般應(yīng)使用只用一半存儲代價的float型來表示數(shù)據(jù)。

          在定義整型列時,可以指定可選的顯示尺寸m。如果這樣,m應(yīng)該是一個1 到255的整數(shù)。它表示用來顯示列中值的字符數(shù)。例如,mediumint(4)指定了一個具有4個字符顯示寬度的mediumint列。如果定義了一個沒有明確寬度的整數(shù)列,將會自動分配給它一個缺省的寬度。缺省值為每種類型的“最長”值的長度。如果某個特定值的可打印表示需要不止m個字符,則顯示完全的值;不會將值截斷以適合m個字符。

          對每種浮點(diǎn)類型,可指定一個最大的顯示尺寸m 和小數(shù)位數(shù)d。m 的值應(yīng)該取1 到255。d的值可為0 到3 0,但是不應(yīng)大于m - 2(如果熟悉odbc 術(shù)語,就會知道m(xù) 和d 對應(yīng)于odbc 概念的“精度”和“小數(shù)點(diǎn)位數(shù)”)。m和d對float和double 都是可選的,但對于decimal是必須的。在選項(xiàng)m 和d時,如果省略了它們,則使用缺省值。

          2.2字符串列類型

          mysql提供了幾種存放字符數(shù)據(jù)的串類型,其類型如下:

    類型名

    說明

    char

    定長字符串

    varchar

    可變長字符串

    tinyblob

    非常小的blob(二進(jìn)制大對象)

    blob

    小blob

    mediumblob

    中等的blob

    longblob

    大blob

    tinytext

    非常小的文本串

    text

    小文本串

    mediumtext

    中等文本串

    longtext

    大文本串

    enum

    枚舉;列可賦予某個枚舉成員

    set

    集合;列可賦予多個集合成員

    表4:字符串列類型

          下表給出了mysql 定義串值列的類型,以及每種類型的最大尺寸和存儲需求。對于可變長的列類型,各行的值所占的存儲量是不同的,這取決于實(shí)際存放在列中的值的長度。這個長度在表中用l 表示。

    類型說明

    最大尺寸

    存儲需求

    char( m)

    m 字節(jié)

    m 字節(jié)

    varchar(m)

    m 字節(jié)

    l + 1字節(jié)

    tinyblob, tinytext

    28- 1字節(jié)

    l + 1字節(jié)

    blob, text

    216 - 1 字節(jié)

    l + 2字節(jié)

    mediumblob, mediumtext

    224- 1字節(jié)

    l + 3字節(jié)

    longblob, longtext

    232- 1字節(jié)

    l + 4字節(jié)

    enum(“value1”, “value2”, ...)

    65535 個成員

    1 或2字節(jié)

    set (“value1”, “value2”, ...)

    64個成員

    1、2、3、4 或8字節(jié)

    表5:串列類型最大尺寸及存儲需求

          l 以外所需的額外字節(jié)為存放該值的長度所需的字節(jié)數(shù)。mysql 通過存儲值的內(nèi)容及其長度來處理可變長度的值。這些額外的字節(jié)是無符號整數(shù)。請注意,可變長類型的最大長度、此類型所需的額外字節(jié)數(shù)以及占用相同字節(jié)數(shù)的無符號整數(shù)之間的對應(yīng)關(guān)系。例如,mediumblob 值可能最多224 - 1字節(jié)長并需要3 個字節(jié)記錄其結(jié)果。3 個字節(jié)的整數(shù)類型mediumint 的最大無符號值為224 - 1。這并非偶然。

          2.3日期時間列類型

          mysql 提供了幾種時間值的列類型,它們分別是: date、datetime、time、timestamp和year。下表給出了mysql 為定義存儲日期和時間值所提供的這些類型,并給出了每種類型的合法取值范圍。

    類型名

    說明

    date

    “yyyy-mm-dd”格式表示的日期值

    time

    “hh:mm:ss”格式表示的時間值

    datetime

    “yyyy-mm-dd hh:mm:ss”格式

    timestamp

    “yyyymmddhhmmss”格式表示的時間戳值

    year

    “yyyy”格式的年份值

    表6:日期時間列類型

    類型名

    取值范圍

    存儲需求

    date

    “1000-01-01”到“9999-12-31”

    3字節(jié)

    time

    “-838:59:59”到“838:59:59”

    3字節(jié)

    datetime

    “1000-01-01 00:00:00” 到“9999-12-31 23:59:59”

    8字節(jié)

    timestamp

    19700101000000 到2037 年的某個時刻

    4字節(jié)

    year

    1901 到2155

    1字節(jié)

    表7: 日前時間列類型的取值范圍和存儲需求

          下面舉個例子:

    create table student

    (

    name varchar(20) not null,

    chinese tinyint(3),

    maths tinyint(3),

    english tinyint(3),

    birthday date

    )

          這個例子創(chuàng)建一個student表,這個表中有name字段,字符類型列,不允許null(空值)。有chinese、maths和english三個整數(shù)類型列。還有個birthday日期類型列。

    posted @ 2008-12-12 09:48 肖馬輝 閱讀(111) | 評論 (0)編輯 收藏
     

    當(dāng)我第一次見到php模板的時候,簡直被迷上了。原來php世界里還有這么好的東西。我瘋狂地學(xué)習(xí)。
    好在當(dāng)時的php模板還不是很龐大,很快我了解了它的原理,并也能自己寫一些了。
    后來,smarty橫空出世,更是擁有了許多為它著迷的fans.許多人開始寫模板引擎,將smarty或其他模板加以改造,使之符合自己的需要。
    縱觀當(dāng)今模板世界,php模板引擎主要分為兩種:
    一種是替換特定字串型的。美工做出來的頁面,中間會嵌入一些什么{block.title}這樣的字符串,然后程序讀入這個模板文件,將中間的{block.title}的字樣替換成實(shí)際從數(shù)據(jù)庫中讀取的內(nèi)容。
    還有一種符雜一些,是一種編譯型的。以smarty為代表,模板文件中實(shí)際上包含了一些簡化的php代碼,比如有的寫的是<{=$site_name}>,<{if $counts>0 }>這樣的語句,實(shí)際是一種自行定義的語言格式。web開發(fā)久的人一眼能看出它們指的是什么。這一類往往會在第一次訪問時被預(yù)編譯,轉(zhuǎn)換成一個php文件何存起來。比如 <{=$site_name}>就變成了,<{if $count>0 }> 就變成了0) {?>。從第二次起,就直接包含已經(jīng)編譯出來的php文件。當(dāng)然,各種模板的處理的具體細(xì)節(jié)不一樣。

    但是,我們?yōu)槭裁匆媚0澹?br /> 這個問題我也不能很好的回答。但是有很多人這么說:要讓美工和程序員的工作分開。要讓代碼層和表現(xiàn)層分開。
    那么我們看這兩種方式實(shí)現(xiàn)了嗎?
    讓您的美工人員打開一個smarty文件,讓他按他的思路去改一下視圖設(shè)計。他會告訴您,天哪,你怎么把我的設(shè)計變成這樣一幅樣子了?這些foreach,if都是什么意思?噢,天哪,我的表格怎么撐得這么大了?….
    原來編譯型的模板技術(shù)讓美工更沒法子做美工了。
    那么替換字符串型的呢?看起來是輕松多了。不過您可以測測您的程序速度,看看他是否已經(jīng)慢了一倍以上。很容易,您用了太多的有preg_match,或是str_ireplace之類的語句來替換。程序重復(fù)一次又一次在您那幾萬個甚至更多字節(jié)的模板文件中查找某個字串,來替換內(nèi)容。
    不僅如此,你還發(fā)現(xiàn)您哪天想在視層面插一點(diǎn)東西時,處處受制于模板。您肯定很想直接在模板中寫一段之類的語句,但是,很抱歉,您不能這么寫。如果只是想echo 一個什么東西,您可以在模板中加一個{{var}}的串,然后在php程序中寫
    $var=”這一個串”;
    $template->assign(”var”,$var);
    但是如果您不是想輸出呢,想做其他操作?抱歉,您還是得改php代碼。這些模板都支持規(guī)矩矩的表格狀的輸出,但是,如果我想輸出20條記錄,我要弄一個第一行2列記錄的,第二行3列的,第三行又是2行的之類的,或者是其他類似找碼,您打算怎么辦?
    難道再讓您的模板引擎也升級成為編譯性的,好讓您往您的模板中加入php語句?

    您錯了。其實(shí),我們看一看,我們的模板引擎充當(dāng)了什么樣的角色呢?我們把一段特定的按一定規(guī)則編寫的html代碼進(jìn)行一定的數(shù)據(jù)處理后輸出成了另外一段,輸出過程中某些字符發(fā)生了改變。那我們的偉大的php干了什么呢?它幫我們把我們按規(guī)則寫好的php代碼也按一定規(guī)則輸出成了一段html。兩者本質(zhì)是一樣的。只是,php本身比我們那些蹩腳的模板引擎更快,更漂亮。
    再說細(xì)一點(diǎn),現(xiàn)在用的最多的Smarty.看一看它的結(jié)構(gòu):

    <{if $article.rates}>
    <span class="title"><{php}>echo art_constant("MD_RATE");<{/php}>:</span>
    <span class="item"><{$article.rating}>/<{$article.rates}></span>
    <{/if}>

    你覺得它是一個美工能看清的html文件么?
    看看編譯后的結(jié)果,它看起來應(yīng)該是這樣的:

    <?php
    if($articles.rates){
    ?>
    <span class="title"><?php echo art_constant("MD_RATE");?>:</span>
    <span class="item"><?php echo $article.rating;?>/<?php echo article.rates;?></span>
    <?php
    }?>

    哈。我們偉大的smarty把這html也變成了php了。然后在以后的工作中,這些php代碼會直接被運(yùn)行。
    有必要嗎?本來是apache承載php,php直接編譯php 源代碼,現(xiàn)在變成了apache承載php,php編譯smarty引擎,smarty引擎又去編譯html文件。反而多了一層,smarty自個兒把本來php要做的工作拿了做了。
    而且糟糕的是,smarty的模板打開來以后,比php文件更讓人難以看清。
    所以我說,放棄您的模板系統(tǒng)吧。但記住我們開發(fā)模板系統(tǒng)的初衷。

    您會說:那要是放棄模板系統(tǒng)了,我怎么分開程序邏輯和視圖層面?
    這個也太好辦了。您可以這樣寫:
    第一個文件這樣寫:

    <?php
    /**
    file :logic.php
    @author renlu xu<helloasp@hotmail.com>
    @link http://www.162cm.com
    */
    $rs=mysql_query("select id,title,body from articles order by id desc limit 30");
    while($row=$mysql_fetch_assoc($rs))
    {
    $rows[]=$row;
    }
    ?>

    第二個文件作為您的視層面的文件。您可以讓您的平面設(shè)計師在mac上設(shè)計漂亮絕頂?shù)膱D片,然后切成html文件,交給您的頁面整合工程師。這個工程不需要懂太多php,他基本上只需要會用print就行了。他把這個html文件改名為view.php,然后在里面加上相應(yīng)代碼:

    <?php
    /**
    file:view.php
    @author renlu xu<helloasp@hotmail.com>
    @link http://www.162cm.com
    */
    foreach($rows as $row)
    {
    echo "<tr>";
    echo "<td>";
    echo $row["id"];
    echo "</td>";
    echo "<td>";
    echo $row["title"];
    echo "</td>";
    echo "</tr>";
    }
    ?>

    ok.這就視層面文件。這個文件用織夢者(dreamweaver)打開后,應(yīng)該跟美工做出來的圖是一樣的,就僅僅多了用那個黃色的問號代表的php代碼。寫得好時,dreamweaver還能列出您的php代碼中輸出了什么內(nèi)容,效果更佳。
    這兩個文件,就是一個是邏輯層,一個是視層面。
    然后用index.php將他們包含起來。

    <?php
    /**
    file:index.php
    @author renlu xu<helloasp@hotmail.com>
    @link http://www.162cm.com
    */
    include "databaseConnect.php";//連接數(shù)據(jù)庫的代碼,我就不寫了
    include "logic.php";
    include "view.php";
    include "cache.php";
    ?>

    這樣邏輯和視,就分開了。那有人會說,如果我用模板,可以將要輸出的內(nèi)容寫入到靜態(tài)文件中,現(xiàn)在沒了模板我該怎么辦?
    這個不是問題。我們用的是php,超酷的php.
    看看,我們加了cache.php.這就是用來實(shí)現(xiàn)您說的緩存效果的。
    我們的cache文件:

    <?php
    /**
    file:cache.php
    @author renlu xu<helloasp@hotmail.com>
    @link http://www.162cm.com
    */
    $content=ob_get_content();
    $fp=fopen("index.html","w");
    fwrite($fp,$content);
    fclose($fp);
    ?>

    當(dāng)然,index.php也改成:

    <?php
    /**
    file:index.php
    @author renlu xu<helloasp@hotmail.com>
    @link http://www.162cm.com
    */
    if(file_exists("index.html"))
    {
    include "index.html";
    exit();
    }
    include "databaseConnect.php";//連接數(shù)據(jù)庫的代碼,我就不寫了
    include "logic.php";
    include "view.php";
    incldue "cache.php";

    ?>

    這樣您看這緩存效果是不是就出來了?

    有人說:我用模板還有一個好處啊,就是模板寫錯了還不會影響到程序的運(yùn)行。是的。咳,怎么說呢?您在模板中將<{=$site_name}>寫成了<{=$sie_name}>是沒啥,您的php程序還是很”健壯”地運(yùn)行著。不過您沒覺得,當(dāng)您期望的那一個將由<{=$site_name}>來打出來的網(wǎng)站名稱沒有出現(xiàn)的時候,您排起錯來會很難找嗎?對于一個程序師來說,您不覺得,光只視層面的那些echo語句,只應(yīng)該是您工作中極微不足道的一部分嗎?在這個主要是echo語句構(gòu)成的視層面文件view.php,您還出現(xiàn)編譯期錯誤,是不是該拉出去打屁屁?

    另外,在php程序正式上線運(yùn)行時,您也可以將它的報錯功能關(guān)閉啊。

    posted @ 2008-11-04 14:26 肖馬輝 閱讀(1146) | 評論 (0)編輯 收藏
     
         摘要: Student(S#,Sname,Sage,Ssex) 學(xué)生表 Course(C#,Cname,T#) 課程表 SC(S#,C#,score) 成績表 Teacher(T#,Tname) 教師表 問題: 1、查詢“001”課程比“002”課程成績高的所有學(xué)生的學(xué)號; select a.S# from (select s#,score fr...  閱讀全文
    posted @ 2008-10-28 18:31 肖馬輝 閱讀(185) | 評論 (0)編輯 收藏
     
    由于斷電或非正常關(guān)機(jī)而導(dǎo)致MySQL數(shù)據(jù)庫出現(xiàn)錯誤是非常常見的問題。有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數(shù)據(jù)檢測恢復(fù)工具。前者使用起來比較簡便。推薦使用。

    1. check table 和 repair table
    登陸mysql 終端:
    mysql -uxxxxx -p dbname
    > check table tabTest;
    如果出現(xiàn)的結(jié)果說Status是OK,則不用修復(fù),如果有Error,可以用:
    > repair table tabTest;
    進(jìn)行修復(fù),修復(fù)之后可以在用check table命令來進(jìn)行檢查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

    2. myisamchk, isamchk
    其中myisamchk適用于MYISAM類型的數(shù)據(jù)表,而isamchk適用于ISAM類型的數(shù)據(jù)表。這兩條命令的主要參數(shù)相同,一般新的系統(tǒng)都使用MYISAM作為缺省的數(shù)據(jù)表類型,這里以myisamchk為例子進(jìn)行說明。當(dāng)發(fā)現(xiàn)某個數(shù)據(jù)表出現(xiàn)問題時可以使用:

    myisamchk tablename.MYI

    進(jìn)行檢測,如果需要修復(fù)的話,可以使用:

    myisamchk -of tablename.MYI

    關(guān)于myisamchk的詳細(xì)參數(shù)說明,可以參見它的使用幫助。需要注意的時在進(jìn)行修改時必須確保MySQL服務(wù)器沒有訪問這個數(shù)據(jù)表,保險的情況下是最好在進(jìn)行檢測時把MySQL服務(wù)器Shutdown掉。

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

    另外可以把下面的命令放在你的rc.local里面啟動MySQL服務(wù)器前:

    [ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI

    其中的/tmp/mysql.sock是MySQL監(jiān)聽的Sock文件位置,對于使用RPM安裝的用戶應(yīng)該是/var/lib/mysql/mysql.sock,對于使用源碼安裝則是/tmp/mysql.sock可以根據(jù)自己的實(shí)際情況進(jìn)行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數(shù)據(jù)庫存放的位置。

    需要注意的時,如果你打算把這條命令放在你的rc.local里面,必須確認(rèn)在執(zhí)行這條指令時MySQL服務(wù)器必須沒有啟動! 

    檢測修復(fù)所有數(shù)據(jù)庫(表)
    mysqlcheck -A -o -r -p 
    ---------------------------------------------------------------------------------
    posted @ 2008-10-27 22:45 肖馬輝 閱讀(123) | 評論 (0)編輯 收藏
     

    Private Sub Command1_Click()
    RegExpTest "123", "99912344"
    End Sub

    Function RegExpTest(patrn, strng)
    Set regEx = CreateObject("VBScript.RegExp")      '     &&建立正則表達(dá)式對象
    regEx.Pattern = patrn                '                                 &&設(shè)置模式
    regEx.IgnoreCase = True       '                                        &&設(shè)置是否區(qū)分字符大小寫
    regEx.Global = True       '                                                &&設(shè)置全局可用性
    Set matches = regEx.Execute(strng)        '                     &&執(zhí)行搜索
    RetStr = ""
    For Each match In matches               '                        &&遍歷匹配集合
        RetStr = RetStr + "找到位置:   " + LTrim(Str(match.FirstIndex)) + "," & vbCrLf
        RetStr = RetStr + "長度為   " + LTrim(Str(match.Length)) + "," & vbCrLf
        RetStr = RetStr + "找到結(jié)果為   " + match.Value + "." + Chr(10) + Chr(13) & vbCrLf
    Next
    MsgBox RetStr
    End Function

    posted @ 2008-10-27 15:10 肖馬輝 閱讀(1109) | 評論 (0)編輯 收藏
     
    SELECT * FROM (SELECT albumid,(SELECT COUNT(userName) FROM albumPhoto WHERE albumID=album.albumID) as albumCOUNT FROM album ) A WHERE albumcount =0
    posted @ 2008-10-24 16:47 肖馬輝 閱讀(130) | 評論 (0)編輯 收藏
     
    osCommerce是什么

    如果你對osCommerce還不了解,本章會告訴你它是什么,可以為你帶來什么好處,以及一點(diǎn)點(diǎn)非常有用的內(nèi)容。
    Commerce是“商業(yè)”的意思,os是Open Source的英文縮寫,Open Source中文稱為“開放源代碼”,以下均簡稱為“開源”。取名為osCommerce的意思就代表“開放源代碼的商業(yè)軟件”,進(jìn)一步來說, osCommerce是一個利用互聯(lián)網(wǎng)建立網(wǎng)上商店的應(yīng)用程序,所以我們可以稱它是“開源網(wǎng)上開店程序”。

    1.1 最好的免費(fèi)電子商務(wù)解決方案

    osCommerce 是一套由自由軟件開發(fā)社團(tuán)開發(fā)并維護(hù)的在線商店的解決方案。由于遵循開源軟件開發(fā)和發(fā)布協(xié)議,osCommerce可以自由下載、安裝和使用,并可以根據(jù)自己的需要進(jìn)行修改和發(fā)布,可以應(yīng)用到任何的商業(yè)環(huán)境中,但是不能夠利用本身進(jìn)行營利性質(zhì)的活動[修改] ,詳細(xì)的GNU General Public License協(xié)議參照附錄。
    這套系統(tǒng)擁有簡單的安裝、靈活的設(shè)置和強(qiáng)大的后臺維護(hù)功能,可以讓不懂技術(shù)的使用者根據(jù)參考的文檔和說明非常容易的在自己的系統(tǒng)平臺上,比如自己的Windows電腦上面安裝和運(yùn)行自己的電子商務(wù)網(wǎng)站。如果遇到問題,可以到官方的支持社區(qū)尋求幫助,在那里,我們可以找到許多資源,可以到技術(shù)支持論壇上搜索和提出你的問題,可以在插件欄目下搜索你需要的外掛插件,可以到FAQ上尋求一般的問題解答,這一切都使得osCommerce具有旺盛的生命力。

    1.2 開放源碼的技術(shù)平臺

    osCommerce 采用了 Open Source 世界里多種主流的技術(shù)方案,提供了一整套的免費(fèi)和開放式的平臺,包括強(qiáng)大的 PHP 動態(tài)網(wǎng)站開發(fā)語言,穩(wěn)定的 Apache web 服務(wù)器, 和速度一流的 MySQL 數(shù)據(jù)庫服務(wù)器。
    安裝和使用osCommerce,不需要特殊的系統(tǒng)平臺,osCommerce 可以運(yùn)行在任何支持 PHP3 或 PHP4 的 web 服務(wù)器上, 環(huán)境需要支持 PHP 和 MySQL 即可, 操作系統(tǒng)可以支持 Linux, Solaris, BSD, 或者 Microsoft Windows 。

    osCommerce的歷史

    根據(jù)官方網(wǎng)站osCommerce項(xiàng)目開始與2000年的三月,自開發(fā)成熟以來,已經(jīng)成為全世界1395家已經(jīng)注冊的在線商店的解決方案,并且這個數(shù)字還在持續(xù)增加。在全球已經(jīng)建立除了官方網(wǎng)站之外的5個國際性的支持站點(diǎn),荷蘭、法國、德國、日本和西班牙,非官方的專題技術(shù)站點(diǎn)則更多。
    今天,一個國際化的團(tuán)隊(duì)正在帶領(lǐng)osCommerce走向一個新的階段,它將成為一個電子商務(wù)解決方案的框架,不僅僅提供簡單易用的設(shè)置和維護(hù)功能,還將使得商店的管理員更加容易的定制和修改修改他們的站點(diǎn),采用他們特有的方式將自己的商店展示在客戶的面前。
    OsCommerce的背后有一個強(qiáng)大和活躍的社區(qū),這是osCommerce項(xiàng)目得以如此成功的一個重要原因,在社區(qū)里,成員之間互相幫助,大家積極參與到開發(fā)的進(jìn)程中,反映了項(xiàng)目的最新狀況。

    如何利用osCommerce

    3.1 官方推薦的特色商店的介紹

    http://www.oscommerce-cn.com/bbs/viewtopic.php?t=33
    http://www.oscommerce-cn.com/bbs/viewtopic.php?t=32
    http://www.oscommerce-cn.com/bbs/viewtopic.php?t=29
    http://www.oscommerce-cn.com/bbs/viewtopic.php?t=24
    http://www.oscommerce-cn.com/bbs/viewtopic.php?t=23
    http://www.oscommerce-cn.com/bbs/viewtopic.php?t=22



    從osCommerce中獲益

    3.3.1 誰能夠從osCommerce中獲益

    利用osCommerce程序,我們可以做許多事情,從多個方面都可以獲得收益,包括:
    l 商業(yè)用戶:創(chuàng)建和管理自己的在線商店
    l 消費(fèi)者:在osCommerce支持的站點(diǎn)上進(jìn)行購物
    l 網(wǎng)站設(shè)計者:輕松的更改電子商務(wù)站點(diǎn)的風(fēng)格和外觀設(shè)計
    l 站點(diǎn)開發(fā)人員:輕松的開發(fā)個性化的功能模塊,學(xué)習(xí)其優(yōu)秀的開發(fā)思想和代碼
    l 電子商務(wù)專家:利用在線商店進(jìn)行理論研究和實(shí)踐
    osCommerce作為一套成熟的應(yīng)用軟件平臺,可以滿足不同人士的需要,所有osCommerce的關(guān)注者都會加入到專業(yè)的支持社區(qū)進(jìn)行問題討論,獲取最新的咨詢和互相學(xué)習(xí)提高。

    3.3.2 你如何從osCommerce中獲益

    我們已經(jīng)了解了osCommerce的思路和框架,我們可以從整體上看看我們可以如何利用osCommerce建立自己的商業(yè)王國,針對不同的站點(diǎn),使用osCommerce可以解決不同的問題。
    可以利用它的目錄產(chǎn)品管理系統(tǒng)做產(chǎn)品發(fā)布,即使你不需要立即在網(wǎng)上讓你的客戶進(jìn)行購物行為,也可以利用osCommerce管理和發(fā)布的你的產(chǎn)品,不需要你自己編寫代碼,就可以有一個動態(tài)的程序?yàn)槟阃瓿珊笈_增加產(chǎn)品,前臺進(jìn)行展示的工作。
    請你的客戶在線注冊,通過osCommerce的客戶管理功能對于你的客戶進(jìn)行簡單的管理,定期的發(fā)送統(tǒng)一的宣傳郵件給他們,告訴他們你現(xiàn)在的最新狀態(tài)和進(jìn)展,告訴他們的最新產(chǎn)品,通過郵件與他們長久的保持聯(lián)系,讓他們到你得網(wǎng)站上看看最新的資料。
    整合你網(wǎng)站的內(nèi)容,如果你已經(jīng)擁有一個信息發(fā)布平臺,擁有了許多訪問的客戶,那太好了,正是使用osCommerce的時候,可以將它的在線購物作為一個欄目增加到你的導(dǎo)航上來,你用有的的是一個完整的綜合站點(diǎn)。
    進(jìn)一步整合客戶和論壇用戶資源,現(xiàn)在已經(jīng)有一些技術(shù)站點(diǎn)在開發(fā)和研究這些內(nèi)容,我們在下面進(jìn)行簡單的介紹,將是你得網(wǎng)上事業(yè)如虎添翼。

    3.4 osCommerce相關(guān)軟件

    如果你是使用google搜索osCommerce,你會發(fā)現(xiàn)許多技術(shù)站點(diǎn)正在進(jìn)行一項(xiàng)非常有意義的工作,就是將osCommerce和PHP世界中的幾個流行的軟件整合起來,比如:nuke,xoops,phpbb。
    將這些系統(tǒng)整合在一起,可以讓他們共享注冊用戶,讓客戶和管理員的你在網(wǎng)站上獲得更加多的體驗(yàn),你可以更加容易的發(fā)布新聞(當(dāng)然,是用 osCommerce的插件也可以很好的完成這樣的工作)他們可以看到最新發(fā)布的消息,可以讓客戶和你在論壇上共同交流,互動起來等等,我們會逐步介紹一些有用的插件。
    posted @ 2008-09-28 09:53 肖馬輝 閱讀(234) | 評論 (0)編輯 收藏
    僅列出標(biāo)題
    共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
     
    主站蜘蛛池模板: 久久亚洲熟女cc98cm| 在线视频网址免费播放| 亚洲高清毛片一区二区| 72pao国产成视频永久免费| 久久免费动漫品精老司机| 成人免费视频88| jlzzjlzz亚洲乱熟在线播放| 亚洲综合激情九月婷婷| 成人免费网站视频www| 国产一级一毛免费黄片| 性感美女视频在线观看免费精品| 亚洲色偷拍区另类无码专区| 免费人成大片在线观看播放| 成年女人毛片免费视频| 亚洲风情亚Aⅴ在线发布| 精品久久久久久久免费人妻 | 亚洲bt加勒比一区二区| 国产成人久久精品亚洲小说| 国产一卡2卡3卡4卡无卡免费视频| 亚洲熟女乱综合一区二区| 精品国产呦系列在线观看免费| 亚洲精品无码久久久久sm| AV激情亚洲男人的天堂国语| 91大神免费观看| 亚洲国产精品无码专区在线观看| 免费国产黄网站在线观看动图| 亚洲中文字幕久久精品无码VA| 免费精品99久久国产综合精品| 亚洲国产香蕉人人爽成AV片久久| 亚洲色最新高清av网站| 国产精品免费综合一区视频| 国产亚洲精品成人AA片| 天天影院成人免费观看| 亚洲一区综合在线播放| 三年片免费高清版| 亚洲精品国产情侣av在线| 黄网址在线永久免费观看| 丝瓜app免费下载网址进入ios| 亚洲日韩乱码久久久久久| 最近中文字幕无免费| 久久亚洲中文无码咪咪爱|