2011/09/10 at 10:26
由于工作性質(zhì)的關系,整天上班8個小時要做在電腦前,下班回家還是對著電腦,現(xiàn)在脖子經(jīng)常疼痛并且僵硬,看來頸椎出問題了,看到一篇文章講述保護頸椎的,就轉(zhuǎn)過來了。
頸椎的24小時保養(yǎng)
亡羊補牢永遠比不上未雨綢繆,與其等到頸椎受傷,再去接受長期繁瑣的治療,還不如先發(fā)制人,主動出擊,讓頸椎受到我們的精心照顧,不發(fā)生事故。
人體頸椎的24小時養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈一7:00
早晨主動調(diào)溫
古人喜歡穿長衣服,一方面是為了禮儀,其實另一方面也是養(yǎng)生之需。無論冬夏,都要給自己的頸椎以舒適的溫度。 即使是為了美麗,也要在辦公室準備一件披肩,以保護好頸背部。偶然有受寒現(xiàn)象,給自己煎一碗驅(qū)寒湯:材料是紅糖2湯匙、生姜7片,水煎10分鐘,飲用 1~2次就可以驅(qū)走寒氣。
人體頸椎的24小時養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈二10:00
5分鐘的頸椎操
即使身處人多的辦公室,你也可以很好地保養(yǎng)頸椎,比如利用工間休息練習一下頸椎操:端坐,全身不動,單頭部運動,分別做低頭、抬頭、左轉(zhuǎn)、右轉(zhuǎn)、前伸、后縮;順、逆時針環(huán)繞動作。每次堅持5分鐘,動作要輕緩、柔和。
人體頸椎的24小時養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈三14:00
兩種按摩的方法
經(jīng)過一個上午的工作,到了下午兩點鐘,可能脖子早已疲憊不堪,精力有些不支,這里有兩個最簡單的急救方法:
(1)脖子后面,從頭顱底端到軀干上部這一段分布著百勞穴的3個點。在不遺余力工作時,不妨抽出短短幾分鐘來按摩這3個反應點,即刻緩解頸椎疲勞,放松全身。
(2)兩手手指互相交叉,放在頸部后方,來回摩擦頸部,力度要輕柔,連續(xù)摩擦50次,頸部發(fā)熱后,會有很放松和舒適的感覺。
人體頸椎的24小時養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈四18:00
做做戶外運動
軟骨組織的營養(yǎng)可不是通過血液供給的,而是通過壓力的變化來進行營養(yǎng)交換。如果缺乏活動的話,軟骨就會遭遇營養(yǎng)不良,進而導致退化,增加戶外活動是養(yǎng)護頸椎的方法之一,要向你推薦的運動項目是游泳、打球、練瑜伽等。
人體頸椎的24小時養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈五20:00
晚餐補腎加分
作為一位忙碌的白領,你可能沒有足夠時間準備健康營養(yǎng)的早餐和午餐,那晚餐的時候可以吃一些營養(yǎng)骨髓的食物。中醫(yī)認為胡桃、山萸肉、生地、黑芝麻、牛骨等具有補腎髓功能,可以把這些材料加入到你的晚餐中,以起到強壯筋骨,推遲腎與脊柱蛻變的效果。
人體頸椎的24小時養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈六21:00
學學大鵬展翅
看電視的時候,你可以學一學大鵬展翅:輕輕彎腰至90度,兩個手臂模仿大鵬飛行一樣伸展開,但可不要將頭抬起來,越高越好,堅持5分鐘。這個動作可以幫助你增加頸椎部肌肉的韌性。
人體頸椎的24小時養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈七22:00
享受中藥熱敷
將小茴香些許、鹽半斤一起炒熱,裝入布袋,放在頸背部熱敷30分鐘。每日1次。可改善頸背部血循環(huán),緩解肌肉痙攣。注意,別讓溫度太高或時間過久。
人體頸椎的24小時養(yǎng)生保健法(圖片來源:資料圖)
保養(yǎng)秘笈八23:00
選擇健康枕頭
枕頭和床也是頸椎的親密伴侶,枕頭過高或者過低,床墊過于柔軟都會連累頸椎。枕頭寬度應達肩部,中間低,兩端高的元寶形的保健枕頭對頸椎有很好的支撐作用,可以讓頸椎得到很好的休息;對于頸椎不好的人來說,木板床、棕繃床是上選,而那種過分柔軟的床肯定不利于頸椎。
2011/09/08 at 16:45
題目有點繞口,大概的意思是
php已經(jīng)賦給模版一個數(shù)組,數(shù)組的信息如下:
$config= array(
1=>'中山',
2=>'石岐'
);
數(shù)據(jù)庫存儲地區(qū)的字段記錄的是該數(shù)組的鍵名,如1,現(xiàn)在要在模版上顯示:中山。
如果這樣寫會報錯:
{{$config.$row.region}}
模版上的正確的寫法是:{{$config[$row.region]}}
今天遇到的問題還更復雜一點,數(shù)據(jù)庫字段存儲的是一些配置的序列化,所以在調(diào)取地區(qū)信息時還需要進行反序列化處理,中間必須有一個賦值的過程:
{{assign var=param value=$l.params|unserialize}}
然后$param.region就可以取得1這個值了
標簽:
php,
smarty
2011/09/06 at 18:06
定義從屬關聯(lián)
1、外鍵放置在主表中;
2、保存時不會自動更新關聯(lián)表的記錄;
3、刪除時也不會更新關聯(lián)表的記錄。
示例:
多個文章都屬于某一個欄目。
格式一:
* class Articles
* {
* var $belongsTo = array(
* array(
* ’tableClass’ => ‘Columns’,
* ’foreignKey’ => ‘column_id’,
* ’mappingName’ => ‘column’
* ),
* );
* }
在上面的格式中,foreignKey 表示在當前表中用什么字段存儲對關聯(lián)表的主鍵引用。
mappingName 表示在主表的返回結果中,以什么名字保存關聯(lián)表的數(shù)據(jù)。
如果不提供 mappingName 參數(shù),則假定使用 tableClass。
格式二:
* class Articles
* {
* var $belongsTo = ‘Columns’;
* }
格式二是一種簡化寫法。foreignKey 字段名將和關聯(lián)表的主鍵字段名相同。
============================
$hasMany
定義一對多關聯(lián)
1、外鍵保存在關聯(lián)表中;
2、保存時自動更新關聯(lián)表的記錄;
3、刪除主表記錄時自動刪除關聯(lián)記錄。
示例:
每個用戶(user)有多張訂單 order。
格式一:
* class Users
* {
* var $hasMany = array(
* array(
* ’tableClass’ => ‘Orders’,
* ’foreignKey’ => ‘user_id’,
* ’mappingName’ => ‘orders’,
* ),
* );
* }
在一對多關系中,當前表并不包含對關聯(lián)表的主鍵引用。
而是在關聯(lián)表中保存對當前表的主鍵引用。
在上面的格式中,foreignKey 指示在關聯(lián)表中用什么字段存儲對當前表的主鍵引用。
mappingName 表示在主表的返回結果中,以什么名字保存關聯(lián)表的數(shù)據(jù)。
如果不提供 mappingName 參數(shù),則假定使用 tableClass。
格式二:
* class Users
* {
* var $hasMany = ‘Orders’;
* }
簡化寫法中,foreignKey 字段名將和當前表的主鍵字段名相同。
============================
$hasOne
定義一對一關聯(lián)
1、外鍵放置在關聯(lián)表中;
2、保存時如果有關聯(lián)對象,則自動創(chuàng)建或更新關聯(lián)表的記錄;
3、刪除主表記錄時自動刪除關聯(lián)記錄。
示例:
當前表為 users,用于存儲用戶賬戶。而每個用戶賬戶有且只有一個對應的個人信息(profile)記錄。
格式一:
* class Users
* {
* var $hasOne = array(
* array(
* ’tableClass’ => ‘Profiles’,
* ’foreignKey’ => ‘profile_id’,
* ’mappingName’ => ‘profile’,
* ),
* );
* }
在上面的格式中,foreignKey 表示在關聯(lián)表中用什么字段存儲對主表的主鍵引用。 mappingName 表示在主表的返回結果中,以什么名字保存關聯(lián)表的數(shù)據(jù)。 如果不提供 mappingName 參數(shù),則假定使用 tableClass。
格式二:
* class Users
* {
* var $hasOne = ‘Profiles’;
* }
格式二是一種簡化寫法。foreignKey 字段名將和主表的主鍵字段名名相同。
============================
$manyToMany
定義多對多關聯(lián)
1、外鍵保存在中間表里面;
2、保存時自動更新中間表;
3、刪除主表記錄時自動刪除中間表的相關記錄。
示例:
每個成員(member)可以擁有多個角色(role),而每個角色也可以指定給多個成員。
格式一:
* class Members
* {
* var $manyToMany = array(
* array(
* ’tableClass’ => ‘Roles’,
* ’joinTable’ => ‘member_roles’,
* ’foreignKey’ => ‘member_id’,
* ’assocforeignKey’ => ‘role_id’,
* ’mappingName’ => ‘roles’,
* ),
* );
* }
在多對多關系中,當前表并不包含對關聯(lián)表的主鍵引用。
而是在一個中間表里面保存對當前表和關聯(lián)表的主鍵引用。
在上面的格式中,joinTable 表示中間表的名字。foreignKey 和
assocforeignKey 分別表示在中間表里面用什么字段存儲對主表和
關聯(lián)表主鍵字段的引用。
mappingName 表示在主表的返回結果中,以什么名字保存關聯(lián)表的數(shù)據(jù)。
如果不提供 mappingName 參數(shù),則假定使用 tableClass。
格式二:
* class Members
* {
* var $manyToMany = ‘Roles’;
* }
簡化寫法中,foreignKey 字段名將和當前表的主鍵字段名相同。
assocforeignKey字段名稱則和關聯(lián)數(shù)據(jù)表的主鍵字段名相同。
而中間表名稱將用FLEA_Db_TableDataGateway::getMidtableName() 方法計算。
hasOne 是一對多關聯(lián),表示一條主表記錄有一條對應的關聯(lián)記錄。
而 belongsTo 是從屬關聯(lián),表示一條主表記錄屬于另一條關聯(lián)記錄。
hasOne 和 belongsTo 正好是相反的關系。
例如 “一個用戶”有一個“個人空間”。那么一個“個人空間”就屬于“一個用戶”。
由于 hasOne 實際上是 hasMany (一對多)關聯(lián)的一種特例,所以 belongsTo 和 hasMany 也是相反的關系。
標簽:
fleaphp,
php
2011/09/06 at 16:13
目前,F(xiàn)leaPHP支持四種類型的數(shù)據(jù)表關聯(lián),分別是:
HAS_ONE: 當前表的每一條記錄都擁有最多一條(0–1)關聯(lián)記錄
HAS_MANY: 當前表的每一條記錄都擁有多條(0-n)關聯(lián)記錄
MANY_TO_MANY: 當前表的每一條記錄都和其他表的多條(0-n)記錄關聯(lián)
BELONGS_TO: 當前表的每一條記錄都屬于另一個表的某條記錄
關聯(lián)中必須設置的屬性為:
‘name’, // 關聯(lián)的名字(如:hasOne、hasMany)
‘tableClass’, // 關聯(lián)的表數(shù)據(jù)入口對象名
‘mappingName’, // 字段映射名
可選屬性:
‘foreignKey’, //外鍵字段名
’sort’, //對關聯(lián)表進行查詢時使用的排序參數(shù)
‘conditions’, //對關聯(lián)表進行查詢時使用的條件參數(shù)
‘fields’, //對關聯(lián)表進行查詢時要獲取的關聯(lián)表字段
‘limit’, //對關聯(lián)表進行查詢時限制查出的記錄數(shù)
‘enabled’, //是否處理關聯(lián),設置為falses時,不處理該表入口的任何關聯(lián)。enabled 的優(yōu)先級高于 linkRead、linkCreate、linkUpdate 和 linkRemove。
‘countOnly’, //指示在查詢關聯(lián)表時是否僅僅統(tǒng)計記錄數(shù),而不實際查詢數(shù)據(jù)
‘counterCache’, //將關聯(lián)記錄總數(shù)緩存到指定的字段,數(shù)據(jù)表中要建立相應的字段
‘linkRead’, //指示是否在主表讀取記錄時也讀取該關聯(lián)對應的關聯(lián)表的記錄,默認ture
‘linkCreate’, //指示是否在主表創(chuàng)建記錄時也創(chuàng)建該關聯(lián)對應的關聯(lián)表的記錄,默認ture
‘linkUpdate’, //指示是否在主表更新記錄時也更新該關聯(lián)對應的關聯(lián)表的記錄,默認ture
‘linkRemove’, //指示是否在主表刪除記錄時也刪除該關聯(lián)對應的關聯(lián)表的記錄,默認ture
‘linkRemoveFillValue’, //當刪除主表記錄而不刪除關聯(lián)表記錄時,用什么值填充關聯(lián)表記錄的外鍵字段,默認0
’saveAssocMethod’, //指示當保存關聯(lián)數(shù)據(jù)時,采用何種方法,默認為 save,可以設置為 create、update 或 replacevar $belongsTo = array(
‘tableClass’ => ‘Table_Users’,
‘mappingName’ => ‘a(chǎn)uthor’,
‘foreignKey’ => ‘user_id’
);
var $hasOne = array(
‘tableClass’ => ‘Table_Profiles’,
‘mappingName’ => ‘profiles’,
‘foreignKey’ => ‘user_id’,
’saveAssocMethod’=> ’save’
);
var $hasMany = array(
‘tableClass’ => ‘Table_Profiles’,
‘mappingName’ => ‘profiles’,
‘foreignKey’ => ‘user_id’,
’saveAssocMethod’=> ’save’
);
var $manyToMany=array(
);
一個表可以有多個關聯(lián)
var $hasMany = array(
array(
‘tableClass’ => ‘Model_Permissions’,
‘foreignKey’ => ‘pclass_id’,
‘mappingName’ => ‘permissions’,
),
array(
‘tableClass’ => ‘Model_Products’,
‘foreignKey’ => ‘pclass_id’,
‘mappingName’ => ‘products’,
‘enabled’ => false,
),
[
array(
...
),
]
);
關聯(lián): 一個關聯(lián)是一個關系,這個關系屬于某一個數(shù)據(jù)表。例如 users 表可能就擁有一個或者多個關聯(lián)。
主表: 對于一個關聯(lián),擁有該關聯(lián)的數(shù)據(jù)表就是主表。例如 posts 表定義了一個 MANY_TO_MANY 關聯(lián)。
那么在這里(指這個關聯(lián)),posts 就是主表。
關聯(lián)表: 在一個關聯(lián)中,關聯(lián)表就是除主表外的另一個表。
外鍵: 在數(shù)據(jù)庫原理中,外鍵的含義很復雜。但在 FleaPHP 框架中的數(shù)據(jù)庫關聯(lián)功能中,
外鍵泛指一個記錄中用于關聯(lián)另一個記錄的字段。例如 profile 表中的 user_id 字段就是用于關聯(lián) users 表的字段。
這個 user_id 字段就是一個外鍵。
中間表: 在 MANY_TO_MANY 關聯(lián)中,除了主表和關聯(lián)表,還需要另一個表來保存這兩個表的記錄之間的互相關聯(lián)關系。
這個表稱為中間表。
HAS_ONE 一對一關聯(lián)
HAS_ONE 是一種非常簡單的關聯(lián)關系。表示一個記錄擁有另一個記錄。這兩個記錄分別位于兩個數(shù)據(jù)表中。
示例
在一個信息管理系統(tǒng)中,users 表用于存儲用戶帳戶的基本信息,例如用戶名、密碼等。
而 profiles 表則用于存儲用戶的個人信息,例如家庭住址、郵政編碼等。
由于每一個用戶(一條 users 表中的記錄)都有一份對應的個人信息(一條 profiles 表中的記錄)。
因此,我們就可以為 users 表定義一個 HAS_ONE 關聯(lián)。
很明顯,users 表的記錄擁有一條 profiles 表的記錄。因此,當 users 表中的一條記錄被刪除時,
被刪除記錄所擁有的 profiles 表中的關聯(lián)記錄也會被自動刪除。
表定義
在 HAS_ONE 關聯(lián)中,要求外鍵放置在關聯(lián)表中
分別對應FLEA_Db_TableDataGateway表中的 $hasOne,$hasMany,$manyToMany,$belongsTo 屬性
我們下面就用 老師,學生,學生檔案,班級的例子說說這幾個關系。
以下是SQL代碼:
//學生表
Create TABLE `testDB`.`student` (
`stu_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`stu_name` VARCHAR(20) NOT NULL,
`stu_class_id` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`stu_id`)
)//學生檔案表
Create TABLE `testDB`.`stu_record` (
`record_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`stu_id` INTEGER UNSIGNED NOT NULL,
`family_add` VARCHAR(150) NULL,
`family_tel` VARCHAR(20) NULL,
PRIMARY KEY (`record_id`)
)
//教師表
Create TABLE `testDB`.`teacher` (
`teacher_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`teacher_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`teacher_id`)
)
//班級表
Create TABLE `testDB`.`classes` (
`class_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`class_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`class_id`)
)
//由于教師與班級是多對多關系,所有建立一個中間連接表以表示該關聯(lián)
Create TABLE `testDB`.`link_teacher_classes` (
`link_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`teacher_id` INTEGER UNSIGNED NOT NULL,
`class_id` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`link_id`)
)
現(xiàn)在,建好表之后,我們還要寫幾個繼承自FLEA_Db_TableDataGateway父類的類,以對應數(shù)據(jù)庫中的Student,Teacher,Classes表(連接表不用了)如下:
//學生表對應的類
class Model_Student extends FLEA_Db_TableDataGateway{
var $tableName = ’student’;
var $primaryKey = ’stu_id’;
/*
這是一對一關系,一個學生對應唯一的一個Record檔案
tableClass 對應要與之關聯(lián)一對一的表的對象類,即檔案表的類
foreignKey是在檔案表中,對應學生表的一個外鍵接連字段,
用該字段標識該檔案屬于哪個學生
mappingName 就是用于在你查詢學生信息時,學生檔案字段的別名
*/
var $hasOne = array(
’tableClass’ => ‘Model_Record’,
’foreignKey’ => ’stu_id’,
’mappingName’ => ‘record’
);
/*
這是從屬關系,一個學生屬于某一個班級,換過來說就是班級與學生一對多,
一個班級有多個學生,而學生就只屬于一個班級
tableClass 指定該類要與之有從屬關系的類,這里是班級類
foreignKey 這里指定的是該表里的連接外表的字段,這里是學生表的班級ID字段
注意:這里的foreignKey指的是本表的字段,而上面hasOne關系中的foreignKey
指的是外表中的字段,要注意區(qū)分清楚
mappingName這里就不多說了,跟上面的一樣,也是用于顯示區(qū)分的別名
*/
var $belongsTo = array(
array(
’tableClass’ => ‘Model_Classes’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ‘class’
)
);
}//檔案表對應的類
class Model_Record extends FLEA_Db_TableDataGateway{
var $tableName = ’stu_record’;
var $primaryKey = ‘record_id’;
}
//教師表對應的類
class Model_Teacher extends FLEA_Db_TableDataGateway{
var $tableName = ‘teacher’;
var $primaryKey = ‘teacher_id’;
/*
這里確立了教師與班級的多對多關系,一個教師可以教多個班級
而一個班級也有多個教師
tableClass 指定要建立多對多關系的表的類
joinTable 這個屬性要注意一個,這個是指定教師表與班級表關系的連接表
由于二維表的數(shù)據(jù)結構的原因,所以多對多關系要用一個中間表(即連接表)來表示
連接表中就指明兩個表各自的主鍵ID就可以了,以兩個字段作復合主鍵,如不用復合
主鍵,就新增加一個字段作主鍵也可,這沒關系
*/
var $manyToMany = array(
array(
’tableClass’ => ‘Model_Classes’,
’mappingName’ => ‘class’,
’joinTable’ => ‘link_teacher_classes’,
)
);
}
class Model_Classes extends FLEA_Db_TableDataGateway{
var $tableName = ‘classes’;
var $primaryKey = ‘class_id’;
/*
這里確立了班級與學生的一對多關系
tableClass 指定該表的類要與哪個表的類建立一對多關系
foreignKey 外鍵ID,這里即指定學生表中定義的班級ID,這個是外表的字段
*/
var $hasMany = array(
array(
’tableClass’ => ‘Model_Student’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ’students’
)
);
var $manyToMany = array(
// 由于多對多關系是雙向的,所以班級表也可以定義上與教師表的多對多關系
// 也可以不寫,看需求而定,比如你想查看某個班級信息時,一并顯示該班
// 有多少個任課老師的話,那就在這個班級類里加上關系,我這里就不寫了。。。
);
}
以上的代碼就建立好了關系了,現(xiàn)在只管使用就是了。
不過還提醒大家一點,在每個關系里,都有一個 ‘enabled’ 的屬性,如果設置為 false的話,則是將該關系禁掉,所以查詢出來的結果就沒有該關系的相應數(shù)據(jù),這樣可以節(jié)省效率,按需要時才打開相應的關聯(lián),該屬性默認為true 可以如下設置:
array(
’tableClass’ => ‘Model_Student’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ’students’,
‘enabled’ => false
)
現(xiàn)在我們來測試一下數(shù)據(jù)。(事先自行插入幾行數(shù)據(jù)用以測試)
$classManager = FLEA::getSingleton(‘Model_Classes’);
$class =& $classManager->find(array(‘class_id’ => 1));
dump($class);
標簽:
fleaphp,
php
2011/09/06 at 16:10
本文將全面分析FleaPHP的數(shù)據(jù)庫查詢條件,包含字符串格式,數(shù)組格式,混合格式,in查詢,or查詢,關聯(lián)查詢等常用查詢。
FleaPHP的數(shù)據(jù)庫查詢條件$conditions 參數(shù)可以是整數(shù)、字符串和數(shù)組三種類型:
1.如果 $conditions 參數(shù)是一個整數(shù),則假定該整數(shù)為主鍵字段值。
view plaincopy to clipboardprint?
// 查詢主鍵字段值為1的記錄
$user = $tableUsers->find(1);
2.如果 $conditions 參數(shù)是一個字符串,則該字符串將直接作為查詢條件,這種方式可以支持最靈活的查詢條件。 例如:
view plaincopy to clipboardprint?
$conditions = 'id < 3'
$user = $tableUsers->find($conditions);
//生成的where字句為“WHERE id < 3”
3.1.如果 $conditions 參數(shù)是一個數(shù)組,且指定了鍵名和值,則查詢條件中字段名為鍵名,字段值等于鍵值。例如:
// 查詢id字段值為3的記錄
$conditions = array(
'id' => '1',
);
$user = $tableUsers->find($conditions);
//生成的where字句為“WHERE `id` = 1”
3.2.如果 $conditions 參數(shù)是一個數(shù)組,但其中的元素沒有鍵名, 則假定鍵值為自定義查詢條件,例如:
$conditions = array('id = 1');
// 生成的where字句為“WHERE `id` = 1”
$user = $tableUsers->find($conditions);
3.3.$conditions 為數(shù)組時,可以混用字符串和鍵值對兩種風格:
$conditions = array(
'id < 3',
'sex' => 'male',
);
$user = $tableUsers->find($conditions);
// 生成的where字句為“id < 3 AND `sex` = 'male'”
$conditions = array( 'id < 3', 'sex' => 'male',);$user = $tableUsers->find($conditions);// 生成的where字句為“id < 3 AND `sex` = 'male'”
$conditions 為數(shù)組時,多個查詢條件之間將使用 AND 布爾運算符進行連接。
3.4.“in()”查詢在FleaPHP中的實現(xiàn)
我們有時候要用到in這樣的操作,那么在condition里面怎么寫呢?
// 假如主鍵名為“id”,需要查詢id的值為1、2、3其中之一,則可以這樣寫:
$condition = array(
'in()' => array(1,2,3),
)
那么如果不是主鍵的話怎么寫了呢? 也很簡單,提供鍵值對即可。例如:
view plaincopy to clipboardprint?
$condition = array(
'in()' => array(
'username' => array('username1','username2')
)
)
3.5 or查詢的實現(xiàn)
當 $conditions 包含多個元素時,每一個數(shù)組元素都是下列格式的數(shù)組:
array(字段名, 值, 比較操作, 連接下一個條件的操作, 是否是自定義命令)如果“是否是自定義命令”為 true,則“字段名”為自定義的查詢條件,而“值”和“比較操作”兩項將被忽略。
“比較操作”的默認值是“=”;
“連接下一個條件的操作”的默認值是“AND”;
“是否是自定義命令”的默認值是 false。
$conditions = array(
array('username', 'dualface', '=', 'OR'),
array('user_level', 'vip', '>='),
);
生成的 sql 如下
WHERE `username` = 'dualface' OR `user_level` >= 'vip'
實例代碼:
$conditions =array(
array('Field1','Value1','LIKE','OR'),
array('Field2','Value2','=','OR'),
array('Field3','Value3','>'),
);
3.6.關聯(lián)表限制條件
上面介紹的都是相對于主表而言的,那么我們?nèi)绾蝸聿僮麝P聯(lián)表的條件呢?我們來看下面
$conditions =array(
array('Field1','Value1','LIKE','OR'),
array('mappingName.Field',$this->primaryKey,'=','OR'), //這里的field是指關聯(lián)表中的字段 ,mappingName就是定義關聯(lián)時候那個影像別名
array('Field2','Value2','>'),
);
4.find(),findAll()函數(shù)中其它參數(shù)的含義和用法如下:
find ( $ conditions,
$ sort = null,
$ fields = '*',
$ queryLinks = true
)
findAll ( $ conditions = null,
$ sort = null,
$ limit = null,
$ fields = '*',
$ queryLinks = true
)
4.1.$sort 參數(shù)指定查詢時的排序方式,類型只能為字符串
例如 'created ASC' 表示按照“created”字段進行從小到大的排序。
4.2.$fields 參數(shù)指定查詢結果中要包含哪些字段,類型可以為字符串或數(shù)組
當數(shù)據(jù)表的字段很多時,通過指定 $fields 參數(shù)可以避免查詢不需要的字段,從而提高性能。
$fields 參數(shù)即可是以“,”逗號分隔的字段名,也可以是包含多個字段名的數(shù)組,例如:
$fields = array('title', 'created');
//也可以寫成下面的字符串形式,兩種寫法作用相同,區(qū)別在于自動生成的字段名兩邊將會添加上“`”符號,以防止出現(xiàn)字段名與SQL關鍵字沖突的情況出現(xiàn)。建議手寫時也加上“`”字符
$fields = 'title, created';
$user = $tableUsers->find('id < 10',NULL,$fields);
$fields = array('title', 'created');//也可以寫成下面的字符串形式,兩種寫法作用相同,區(qū)別在于自動生成的字段名兩邊將會添加上“`”符號,以防止出現(xiàn)字段名與SQL關鍵字沖突的情況出現(xiàn)。建議手寫時也加上“`”字符$fields = 'title, created';$user = $tableUsers->find('id < 10',NULL,$fields);
推薦使用數(shù)組,這樣表數(shù)據(jù)入口處理起來更快一些。
4.3.$queryLinks表示是否啟用關聯(lián)查詢,默認是啟用的,即默認會查詢關聯(lián)表(前提是關聯(lián)設置屬性enabled是開啟狀態(tài))
下一篇文章將討論一下FleaPHP的數(shù)據(jù)表關聯(lián)設置
標簽:
fleaphp,
php
2011/09/03 at 10:11
一個網(wǎng)站的robots文件對于做seo是至關重要的,它可以限制搜索引擎蜘蛛抓取不該收錄的目錄或者頁面,避免資源的浪費,它的規(guī)則主要有以下幾點:
1) User-Agent鍵
后面的內(nèi)容對應的是各個具體的搜索引擎爬行器的名稱。如百度是Baiduspider,谷歌是Googlebot。
一般我們這樣寫:
User-Agent: *
表示允許所有搜索引擎蜘蛛來爬行抓取。如果只想讓某一個搜索引擎蜘蛛來爬行,在后面列出名字即可。如果是多個,則重復寫。
注意:User-Agent:后面要有一個空格。
在robots.txt中,鍵后面加:號,后面必有一個空格,和值相區(qū)分開。
2)Disallow鍵
該鍵用來說明不允許搜索引擎蜘蛛抓取的URL路徑。
例如:Disallow: /index.php 禁止網(wǎng)站index.php文件
Allow鍵
該鍵說明允許搜索引擎蜘蛛爬行的URL路徑
例如:Allow: /index.php 允許網(wǎng)站的index.php
通配符*
代表任意多個字符
例如:Disallow: /*.jpg 網(wǎng)站所有的jpg文件被禁止了。
結束符$
表示以前面字符結束的url。
例如:Disallow: /?$ 網(wǎng)站所有以?結尾的文件被禁止。
應該注意的是:
1,在"/robots.txt"文件中,至少要有一條Disallow記錄,允許收錄優(yōu)先級要高于禁止收錄,如
User-agent: *
Allow: /a/b.htm
Disallow: /a/
則a目錄下b.htm可以訪問,其他禁止
2,注意路徑后面加斜杠和不加斜杠的區(qū)別
如果目錄后邊帶斜杠,那么訪問不帶斜杠的地址時還是可以訪問目錄首頁,如果想屏蔽掉整個目錄,建議不帶斜杠
Allow或Disallow的值 |
URL |
匹配結果 |
/tmp |
/tmp |
yes |
/tmp |
/tmp.html |
yes |
/tmp |
/tmp/a.html |
yes |
/tmp/ |
/tmp |
no |
/tmp/ |
/tmphoho |
no |
/tmp/ |
/tmp/a.html |
yes |
|
/Hello* |
/Hello.html |
yes |
/He*lo |
/Hello,lolo |
yes |
/Heap*lo |
/Hello,lolo |
no |
html$ |
/tmpa.html |
yes |
/a.html$ |
/a.html |
yes |
htm$ |
/a.html |
no |
3,robots文件只有放在根目錄才有效,放在子目錄沒效。
4,robots.txt文件用法舉例
例1. 禁止所有搜索引擎訪問網(wǎng)站的任何部分 |
User-agent: *
Disallow: / |
例2. 允許所有的robot訪問
(或者也可以建一個空文件 “/robots.txt”) |
User-agent: *
Disallow:
或者
User-agent: *
Allow: / |
例3. 僅禁止Baiduspider訪問您的網(wǎng)站 |
User-agent: Baiduspider
Disallow: / |
例4. 僅允許Baiduspider訪問您的網(wǎng)站 |
User-agent: Baiduspider
Disallow:
User-agent: *
Disallow: / |
例5. 禁止spider訪問特定目錄
在這個例子中,該網(wǎng)站有三個目錄對搜索引擎的訪問做了限制,即robot不會訪問這三個目錄。需要注意的是對每一個目錄必須分開聲明,而不能寫成 “Disallow: /cgi-bin/ /tmp/”。 |
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/ |
例6. 允許訪問特定目錄中的部分url |
User-agent: *
Allow: /cgi-bin/see
Allow: /tmp/hi
Allow: /~joe/look
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/ |
例7. 使用”*”限制訪問url
禁止訪問/cgi-bin/目錄下的所有以”.htm”為后綴的URL(包含子目錄)。 |
User-agent: *
Disallow: /cgi-bin/*.htm
|
例8. 使用”$”限制訪問url
僅允許訪問以”.htm”為后綴的URL。 |
User-agent: *
Allow: .htm$
Disallow: / |
例9. 禁止訪問網(wǎng)站中所有的動態(tài)頁面 |
User-agent: *
Disallow: /*?* |
例10. 禁止Baiduspider抓取網(wǎng)站上所有圖片
僅允許抓取網(wǎng)頁,禁止抓取任何圖片。 |
User-agent: Baiduspider
Disallow: .jpg$
Disallow: .jpeg$
Disallow: .gif$
Disallow: .png$
Disallow: .bmp$ |
例11. 僅允許Baiduspider抓取網(wǎng)頁和.gif格式圖片
允許抓取網(wǎng)頁和gif格式圖片,不允許抓取其他格式圖片 |
User-agent: Baiduspider
Allow: .gif$
Disallow: .jpg$
Disallow: .jpeg$
Disallow: .png$
Disallow: .bmp$ |
例12. 僅禁止Baiduspider抓取.jpg格式圖片 |
User-agent: Baiduspider
Disallow: .jpg$ |
標簽:
robots,
seo
2011/09/01 at 09:34
解決WordPress半角引號自動轉(zhuǎn)換為全角引號問題有許多種方法,有插件,有修改源碼,有修改主題,下面介紹兩種:
一、通過修改主題functions.php實現(xiàn)(推薦使用):
在主題functions.php文件中加入以下代碼:
/*禁用半角引號自動轉(zhuǎn)換為全角引號*/
remove_filter('the_content','wptexturize');
二、通過修改WP源文件實現(xiàn):
注釋掉 wp-includes\formatting.php文件的下列兩行代碼即可
$curl = str_replace($static_characters, $static_replacements, $curl);
$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
標簽:
wordpress
2011/08/30 at 16:20
昨天已經(jīng)解決了flowplayer播放swf出現(xiàn)的重聲問題,但是還有一個問題就是下面controls控制菜單依然失效,沒辦法,客戶建議直接隱藏掉,下面是代碼:
flowplayer("kzxy_player", "/index/flowplayer/flowplayer-3.2.7.swf",{
clip: {
linkUrl:'#re',
onBegin: function () { this.getPlugin("play").hide(); }
},
plugins: {controls: null}
});
2011/08/29 at 14:38
今天在修改一個項目,客戶網(wǎng)站用到flowplayer-3.2.7這個播放器來播放視頻文件,如果格式是flv格式的文件則播放沒有問題,如果格式是swf的文件,播放的時候就會出現(xiàn)一個play again 的按鈕一直在視頻上面,一點擊就會重新播放,聲音還會疊加,跑到官網(wǎng)去看手冊,最后想出一個解決的方案是把按鈕隱藏掉,但是這樣點擊視頻還是會出現(xiàn)重播,于是我給視頻加了一個鏈接,如下:
var txt = '<a onclick="return false"; href="<?php echo $mvurl; ?>" '
+ 'style="display:block;width:480px;height:360px;" id="kzxy_player"></a>';
document.write(txt);
flowplayer("kzxy_player", "/index/flowplayer/flowplayer-3.2.7.swf",{
clip: {
linkUrl:'#re',//加一個無動作的鏈接
onBegin: function () { this.getPlugin("play").hide(); } //隱藏按鈕
}
});
2011/08/28 at 15:46
默認iframe框架是不能撐開高度的,如果需要讓框架高度自適應需要用js實現(xiàn)
js代碼:
var adjustIframe = function (id) {
var iframe = document.getElementById(id)
var idoc = iframe.contentWindow && iframe.contentWindow.document || iframe.contentDocument;
var callback = function () {
var iheight = Math.max(idoc.body.scrollHeight, idoc.documentElement.scrollHeight); //取得其高
iframe.style.height = iheight + "px";
}
if (iframe.attachEvent) {
iframe.attachEvent("onload", callback);
} else {
iframe.onload = callback
}
}
HTML代碼如下所示:
使用代碼:
window.onload = function(){
adjustIframe("js_sub_web");
}
標簽:
iframe,
js