php索表
A. php數組索引
不可以的!一個元素,只能有唯一的索引,要麼數字要麼字元串
不過在同一個數組中,可以存在不同的元素,分別使用數字索引和字元串索引
B. php決定著一個表是如何存儲和索引數據
你這個問題我有些沒看懂。。。php或者其他程序語言,通過連接資料庫執行sql語句存入想要存入的數據,索引是建表時在資料庫添加的,當然也可以通過php來實現。
C. php sql 全文檢索
多個條件的SQL語句,條件之間使用AND、OR鏈接起來就可以了,例如:
SELECT * FROM 表表 WHERE 姓名='XXX' AND 年齡=99 AND 性別='不男不女'
建立一個表單
連接資料庫
選擇資料庫
選擇表
執行sql語句 sql="select 欄位名 from 表名 where 欄位名2 like 表單傳的值";
這里表單傳的值即為「檢索詞」
這是最基本的查詢
如果需要改變「欄位名2」的欄位,可以在表單加個下拉框,提交的時候一起傳過來
更復雜的查詢要涉及到2表的聯合,這個比較麻煩
希望對樓主有幫助
E. php sphinx 搜索 多表聯查速度怎麼樣
使用Elasticsearch和solr一樣,使用lucene
這個和php無關,因為無論哪個工具,都是通過網路介面查詢,所以我不回答有關是否適合php的情況~~
## ES 缺點
基於java,會有一些java的常見問題需要注意,比如gc
單純執行速度上比C寫的sphinx慢
## sphinx 優點
純粹,沒有什麼花哨的其他功能
C寫的,速度快
新版本加了分布式、動態更新索引等功能
## 下面列舉Es比sphinx優秀的部分
1、部署簡單,雖然sphinx部署也挺簡單,但是在書寫配置的時候,你會發現,sphinx的配置是要寫好後,重啟sphinx,而Elasticsearch針對某個索引的配置,是可以動態寫入的。
2、調試簡單,sphinx有命令行工具可以調試,而Elasticsearch使用的是http介面進行調試,不需要專門的API類,幾行php代碼就可以寫一個Elasticsearch的API。
3、可視化工具比較多,有收費的,也有的,比如kibana head marvel。
4、提供結構化的JSON查詢語句,易讀性強
5、Es可以保留源數據(可選),也就是說,你可以不需要mysql的支持,就可以完成整個搜索過程,即使你不需要這個功能,在調試的時候,還是讓人感到非常便利,不用將查詢結果到資料庫匹配一下。
6、Es可以動態更新全文索引,動態更新單個記錄,而不像sphinx一樣需要重建全部
7、對UTF8的支持是不需要單獨配置的
## 從中文分詞上來說
首先我覺得分詞最重要的基本都是詞庫,分詞演算法兩個工具基本都可以使用。
lucene 支持很多分詞工具,比如
word
比如ik
這兩個工具最近都很活躍,因為Es更新2.0 和 2.1
比較分詞區別(sphinx可能有誤):
sphinx分詞 我不太熟悉它的機制,多數情況下我使用scws分詞,發送給sphinx,然後設置匹配規則,比如最大匹配(我基本都是基於模糊匹配在用sphinx)
Es的全文索引是基於分詞的,也就是事先分好詞,每個詞對應某些記錄,自動進行TF/IDF的運算,得到一個評分後返回,當然這個評分可以改(sphinx同樣支持修改評分),這種檢索方式肯定更快,但是受到分詞限制,所以我每個字也分詞,然而這樣可能影響分數判斷。
另一方面ES也支持類似sphinx的匹配方式,叫做fuzzy,模糊匹配,一般會一起使用,一個詞不在分詞庫中的時候,就用fuzzy,所以Es在功能上,應該和sphinx不會有太多差別,而且應該要更多。
## 個人方面
我在使用shpinx的時候,會查3次,一次完全按照用戶輸入的查(如果用戶沒有輸入空格),一次按照空格分開查或者分詞系統分詞結果查,一次按照單個字來查(前提是前面兩個結果太少)。
在用Es的時候,如果沒有辦法正確分詞,會按照fuzzy + 單字查(可以同時進行),如果有辦法分詞,按照分詞結果 + 單字查(可以同時)
## 後期維護上:
sphinx的配置文件在mysql分表之後,維護起來是比較麻煩的,你可以用php腳本當做配置文件,這樣會好很多。
Es的索引是可以主動發給它去建立的(通過http介面),分表之後,它不關心資料庫狀態和結構。新增欄位可以熱更新。
## 擴展性上:
Es和sphinx都支持分布式索引,擴展性都沒有問題
兩者都支持別名,Es的別名加上動態建立索引,使得更換索引結構或者重建索引後,支持0宕機時間。而sphinx的rotate選項可以動態更新索引(不知道能不能動態創建索引,因為sphinx我在使用的時候,索引都要求寫在配置文件里。
性能方面沒有測試數據。從直觀感受上sphinx要快一些。
F. php mysql 索引如何操作
你需要在test1表中的id設置為主鍵然後在表中加入userid設置為非空 ,然後進行兩個表的關聯,
SQL語句為:eg:
"select * from test as A,test2 as B where A.userd=B.id and A.userid='臨時會員'";
應該是這樣地!你可以按這把你的給修改一下,如果你感覺對你有幫助請給好評!
G. PHP下拉列表菜單SELECT選定對應項後檢索資料庫顯示數據問題
option裡面少了value ,當選擇了這個的時候得到這個value,使用ajax到後台去查詢這個ID的值,返回這個前端,對應展示就行了
H. 如何使用PHP實現全文檢索功能
1、新建數據表:CREATE TABLE fulltext_sample( TEXT,FULLTEXT()) TYPE=MyISAM;這里的就是一個fulltext類型的欄位,如果建表的時候沒有添加全文檢索欄位,也可以通過alert來添加,如:ALTER TABLE fulltext_sample ADD FULLTEXT()
2、插入數據:INSERT INTO fulltext_sample VALUES('It appears good from here'),('The here and the past'),('Why are we hear'),('An all-out alert'),('All you need is love'),('A good alert');
3、數據檢索:SELECT * FROM fulltext_sample WHERE MATCH() AGAINST('love');上面就是mysql的全文檢索功能,注意:在全文索引上進行搜索是不區分大小寫的。下面再看如何實現中文全文檢索。fulltext欄位是以詞語為單位,詞語之間需要用空格隔開,而漢語的句子中各個詞語之間並不會用空格隔開,因此我們需要對中文進行分詞,這也就是為什麼上面需要強詞用到中文分詞擴展模塊。但是盡管對中文進行分詞,MYSQL還是不能通過MATCH來實現中文的全文檢索,這需要通過一定的方法來進行轉換,一個比較簡單實用的方法是採用下面這個函數(當然還有更好的),它將中文進行了urlencode轉換。function q_encode($str){$data = array_filter(explode(" ",$str));$data = array_flip(array_flip($data));foreach ($data as $ss) {if (strlen($ss)>1 )$data_code .= str_replace("%","",urlencode($ss)) . " ";}$data_code = trim($data_code);return $data_code;}將轉換過後的內容保存至事先定義好的fulltext欄位。同樣,在查詢的時候也需要將查詢的關鍵詞進行同樣方法的轉換。
I. 查詢mysql資料庫中所有表名
使用select命令,可以查詢所有表名
寫法如下:
selecttable_namefrominformation_schema.tableswheretable_schema='當前資料庫'
(9)php索表擴展閱讀
其它用法
1、使用SHOW語句找出在伺服器上當前存在什麼資料庫:
mysql> SHOW DATABASES;
2、創建一個資料庫MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3、選擇你所創建的資料庫
mysql> USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)
4、查看現在的資料庫中存在什麼表
mysql> SHOW TABLES;
5、創建一個資料庫表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6、顯示表的結構:
mysql> DESCRIBE MYTABLE;
7、往表中加入記錄
mysql> insert into MYTABLE values (」hyq」,」M」);
8、用文本方式將數據裝入資料庫表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE 「D:/mysql.txt」 INTO TABLE MYTABLE;
9、導入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
J. php如何根據數據表欄位索引來判斷是否添加欄位
不要用mysql_fetch_object()這個函數來判斷,這個返回來的是個數組;一般情況下是這么來判斷的:$query="select * from ".$tablepre."common_members"." where username ='".$_POST['reg_username']."'";$result=mysql_query($query,$link);$num = mysql_num_rows($result); //取得結果集中行的數目if($num){echo '<script type="text/javascript">alert("用戶名已被佔用 ,請重新輸入!");location.replace("../reg/index.php");</script>';die();}