Reply to this topicStart new topicStart Poll

> search engine問題
魏孝政
發表於: Nov 23 2008, 18:53  
Quote Post


迪拉斯艦隊與荊揚軍樂團之間
************

發表數: 3,158
所屬群組: 一般
註冊日期: 9-18-2003

活躍:11
聲望:685


嗯,是這樣的,想寫一個search engine。不過新手沒什麼概念。

查了查google找open source,似乎最多人推薦一隻叫apache lucene,但那隻open source是以java來寫的。我想找一個php的。

很簡單的也就可以,我只是想要一個參考。

另外我想問如何想要搜查的「字」是日文,有沒有什麼特別要留意的(我想把一堆東西堆進db內,那攪一個php search engine去查)


--------------------
user posted image
PMEmail Poster
Top
徐元直
發表於: Nov 23 2008, 19:02  評價+1
Quote Post


攤抖首領
************

發表數: 7,913
所屬群組: 君主
註冊日期: 9-18-2003

活躍:60
聲望:4176




--------------------
......
PMEmail Poster
Top
魏孝政
發表於: Nov 25 2008, 17:48  
Quote Post


迪拉斯艦隊與荊揚軍樂團之間
************

發表數: 3,158
所屬群組: 一般
註冊日期: 9-18-2003

活躍:11
聲望:685


根據元直你提供的那個參考,基本上再作動一些地方都完成了。

不過又有一些深入一點的問題想請教

有點像hksan那樣的搜索方法@@

e.g:我把db內的資源分成了a,b,c三個項目種類

我在form處加上代表a,b,c的三個clickbox,那我怎樣可以將用家在點擊了a後,只搜索與搜索字相同並且只屬於a項目種類的結果呢?

而出現的結果如果是搜索出頁面,如何能在結果中作出連結?


--------------------
user posted image
PMEmail Poster
Top
徐元直
發表於: Nov 25 2008, 18:10  
Quote Post


攤抖首領
************

發表數: 7,913
所屬群組: 君主
註冊日期: 9-18-2003

活躍:60
聲望:4176


問題不夠具體。

你是不懂得怎樣讓php判斷用家點了哪個clickbox,還是不懂得只搜索a項目的SQL語法?如果問題是後者,abc項目是怎麼分出來的?不同的table?不同的column?不同的field?起碼你要講一講資料庫結構。

至於做出連結,那不過是用php輸出多一段a href而已,困難在哪裡?


--------------------
......
PMEmail Poster
Top
魏孝政
發表於: Nov 26 2008, 12:25  
Quote Post


迪拉斯艦隊與荊揚軍樂團之間
************

發表數: 3,158
所屬群組: 一般
註冊日期: 9-18-2003

活躍:11
聲望:685


其實本來是想問前者。

後者是column。

最後那個其實我就是想這樣作的= _ =,就當我信心不足所以就想一併問問確定一下吧(汗)


--------------------
user posted image
PMEmail Poster
Top
高長恭
發表於: Nov 26 2008, 15:14  
Quote Post


∼('▽'*)
*********

發表數: 1,054
所屬群組: 太守
註冊日期: 9-18-2003

活躍:9
聲望:435


流程:
顯示html form
→使用者輸入資料(文字、check box、radio button等等)
→提交到伺服器
→在php內跟據不同check box、radio button的value砌SQL statement
→連到DB執行query
→php將找到的結果轉成html

你的問題是哪個階段?


--------------------
user posted image
PMEmail PosterUsers WebsiteIntegrity Messenger IM
Top
魏孝政
發表於: Nov 26 2008, 15:33  
Quote Post


迪拉斯艦隊與荊揚軍樂團之間
************

發表數: 3,158
所屬群組: 一般
註冊日期: 9-18-2003

活躍:11
聲望:685


應該是這個

→在php內跟據不同check box、radio button的value砌SQL statement


--------------------
user posted image
PMEmail Poster
Top
高長恭
?發表於: Nov 26 2008, 15:46  
Quote Post


∼('▽'*)
*********

發表數: 1,054
所屬群組: 太守
註冊日期: 9-18-2003

活躍:9
聲望:435


QUOTE (魏孝政 @ Nov 26 2008, 23:33 )
應該是這個

→在php內跟據不同check box、radio button的value砌SQL statement

不懂如何在php內取回form的value嗎?
還是不懂根據form的value砌sql statement?
還是不懂該砌一條怎樣的sql statement去做query?
還是要找的東西放到好幾個table內,不知如何處理?


--------------------
user posted image
PMEmail PosterUsers WebsiteIntegrity Messenger IM
Top
魏孝政
發表於: Nov 26 2008, 15:56  
Quote Post


迪拉斯艦隊與荊揚軍樂團之間
************

發表數: 3,158
所屬群組: 一般
註冊日期: 9-18-2003

活躍:11
聲望:685


QUOTE (高長恭 @ Nov 26 2008, 23:46 )
QUOTE (魏孝政 @ Nov 26 2008, 23:33 )
應該是這個

→在php內跟據不同check box、radio button的value砌SQL statement

不懂如何在php內取回form的value嗎?
還是不懂根據form的value砌sql statement?
還是不懂該砌一條怎樣的sql statement去做query?
還是要找的東西放到好幾個table內,不知如何處理?

我上面說的不明白 blink.gif ???

你是不懂得怎樣讓php判斷用家點了哪個clickbox <- 這個

舉例像HKSAN的SEARCH ENGINE好了

用家點了盧江城,自然只會給回你在盧江城內符合KEYWORDS的帖子。


--------------------
user posted image
PMEmail Poster
Top
高長恭
發表於: Nov 26 2008, 16:21  評價+1
Quote Post


∼('▽'*)
*********

發表數: 1,054
所屬群組: 太守
註冊日期: 9-18-2003

活躍:9
聲望:435


QUOTE (魏孝政 @ Nov 26 2008, 23:56 )
QUOTE (高長恭 @ Nov 26 2008, 23:46 )
QUOTE (魏孝政 @ Nov 26 2008, 23:33 )
應該是這個

→在php內跟據不同check box、radio button的value砌SQL statement

不懂如何在php內取回form的value嗎?
還是不懂根據form的value砌sql statement?
還是不懂該砌一條怎樣的sql statement去做query?
還是要找的東西放到好幾個table內,不知如何處理?

我上面說的不明白 blink.gif ???

你是不懂得怎樣讓php判斷用家點了哪個clickbox <- 這個

舉例像HKSAN的SEARCH ENGINE好了

用家點了盧江城,自然只會給回你在盧江城內符合KEYWORDS的帖子。

因為不懂處理multiple?

http://www.php.net/manual/en/faq.html.php
參考一下How do I get all the results from a select multiple HTML tag?

單一value的(包括radio)
CODE
<input type='radio' name='a' value='1' />
<input type='radio' name='a' value='2' />

php內:
CODE
$a = $_POST['a'];


可複選的,如check box
CODE
<input type='checkbox' name='a[]' value='1' />
<input type='radio' name='a[]' value='2' />

php內:
CODE
$a = $_POST['a']; //←變成array了
$count_a = count($a); //如果value=1和value=2都選了的話這個應該是2


不過既然用checkbox的話這樣可能更好
CODE
<input type='checkbox' name='a' value='1' />
<input type='radio' name='b' value='2' />

php內:
CODE
$arr = array();
if ($_POST['a']) $arr[] = $_POST['a'];
if ($_POST['b']) $arr[] = $_POST['b'];


--------------------
user posted image
PMEmail PosterUsers WebsiteIntegrity Messenger IM
Top
魏孝政
發表於: Dec 1 2008, 14:07  
Quote Post


迪拉斯艦隊與荊揚軍樂團之間
************

發表數: 3,158
所屬群組: 一般
註冊日期: 9-18-2003

活躍:11
聲望:685


昨天作了作,白木了,不太明白checkbox query如何寫

radio因為是單選,只要用家點了那一個,寫個if statement之類看看用家選了那一個,將選的那一個放進query位置即可(還是每個if statement內都寫上一條query,用家點了那一個就走那一條query.)

可是checkbox是多選的,在query就變成寫成例如select $keywords from xxx where yyy = a or yyy = b

那用count怎麼能知道用家選那個(count查看了是可以知道用家選了多少個選項)

可能e.g有a,b,c三個checkbox

選了a,c

count = 2

那我只知道有2個選了,怎知道是a,c或a,b或b,c

抱歉我沒看懂當中的操作

本篇文章已被 魏孝政 於 Dec 1 2008, 14:10 編輯過


--------------------
user posted image
PMEmail Poster
Top
高長恭
發表於: Dec 1 2008, 15:12  評價+1
Quote Post


∼('▽'*)
*********

發表數: 1,054
所屬群組: 太守
註冊日期: 9-18-2003

活躍:9
聲望:435


方法一
HTML
CODE
<input type='checkbox' name='optionA' value='29' />
<input type='checkbox' name='option2' value='13' />

php
CODE
$selected = array();
if ($_POST['optionA']) $selected[] = 'A';
if ($_POST['optionB']) $selected[] = 'B';
for ($i=0; $i<count($selected); $i++) {
 if ($selected[$i] == 'A') /* do something useful */
 else if ($selected[$i] == 'B') /* do something useless */
}


方法二
HTML
CODE
<input type='checkbox' name='option[]' value='A' />
<input type='checkbox' name='option[]' value='B' />

php
CODE
$selected = $_POST['option'];
if (!$selected) $selected = array();
for ($i=0; $i<count($selected); $i++) {
 if ($selected[$i] == 'A') /* do something useful */
 else if ($selected[$i] == 'B') /* do something useless */
}


本篇文章已被 高長恭 於 Dec 1 2008, 15:14 編輯過


--------------------
user posted image
PMEmail PosterUsers WebsiteIntegrity Messenger IM
Top
高長恭
發表於: Dec 1 2008, 15:52  
Quote Post


∼('▽'*)
*********

發表數: 1,054
所屬群組: 太守
註冊日期: 9-18-2003

活躍:9
聲望:435


講解一下

方法一是用input name去判斷user選了哪個checkbox
由於每一個checkbox都用不同的name,所以那個input的value都不太重要
只要在server side看看submit 回來的form有沒有選那個field即可

方法二是用value去判斷user選了哪個checkbox
server side接收的是一個array,而array內的element就是儲存了user點選了的checkbox的value

例如
input name='option[]' 有5個 checkbox,value分別是1,2,3,4,5
如果我選了1,3,5再submit
那麼server side $_POST['option']這個array應該是[1,3,5]
要留意的是php內如果想一個input name儲多過一個value的一定要'name[]',沒有[]php就會將那個field當成single value

本篇文章已被 高長恭 於 Dec 1 2008, 18:25 編輯過


--------------------
user posted image
PMEmail PosterUsers WebsiteIntegrity Messenger IM
Top
徐元直
發表於: Dec 1 2008, 22:33  評價+1
Quote Post


攤抖首領
************

發表數: 7,913
所屬群組: 君主
註冊日期: 9-18-2003

活躍:60
聲望:4176


怎麼讀資料恭說過了,我講一下怎麼在同一個query內處理單選、多選或全選。

CODE

$query="SELECT $keywords FROM xxx WHERE ";
$previous_value=0;

for ($i=0; $i<count($selected); $i++) {
if ($selected[$i] == 'A') {
if ($previous_value == 1) $query.="OR "; /*注意要留空格*/
$query.="yyy=a ";
$previous_value=1;
} else if ($selected[$i] == 'B') {
if ($previous_value == 1) $query.="OR ";
$query.="yyy=b ";
$previous_value=1;
} else if ($selected[$i] == 'C') {
......如此類推,有多少選項就有多少個if
}
} /*end loop*/

if ($previous_value == 0) {
/*沒選擇任何東西*/
} else {
$query.="在此加上query的結尾";
執行$query;
}


簡單來說,就是loop那個selection array,發現哪個選項就把哪個condition加進query中,等組合好整條query再一次過執行。

本篇文章已被 徐元直 於 Dec 1 2008, 22:53 編輯過


--------------------
......
PMEmail Poster
Top
參謀ABC
發表於: Dec 2 2008, 08:23  評價+2
Quote Post


神隱之主犯-永遠與須臾之罪人
************

發表數: 3,458
所屬群組: 太守
註冊日期: 9-18-2003

活躍:15
聲望:1860


CODE
<?php
function getSQLConditionByInputArray(&$itemArray,$prepend,$tableFieldName)
{
 $c=count($itemArray);
 $str='';
 for($i=0;$i<$c;$i++)
 {
  $var = $itemArray[$i];
  $str.=$i==0?$prepend:' or ';
  $str.=$tableFieldName.'='.$var;
 }
 return $str;
}
$sql = 'select xxx from table1';

$sql.=getSQLConditionByInputArray($_POST['options'],' where ','yyy');

echo $sql;
?>


本篇文章已被 參謀ABC 於 Dec 2 2008, 09:04 編輯過
PM
Top
高長恭
發表於: Dec 2 2008, 13:00  
Quote Post


∼('▽'*)
*********

發表數: 1,054
所屬群組: 太守
註冊日期: 9-18-2003

活躍:9
聲望:435


來亂的
CODE
<?php
function getSQLConditionByInputArray(&$itemArray,$prepend,$tableFieldName)
{
   return sprintf("%s '%s' = %s", $prepend, $tableFieldName , implode(" or '" . $tableFieldName . "' = ",$itemArray) );
}
$sql = 'select xxx from table1';

$sql.=getSQLConditionByInputArray($_POST['options'],' where ','yyy');

echo $sql;
?>


本篇文章已被 高長恭 於 Dec 2 2008, 16:20 編輯過


--------------------
user posted image
PMEmail PosterUsers WebsiteIntegrity Messenger IM
Top
魏孝政
發表於: Dec 8 2008, 20:43  評價+1 | -1
Quote Post


迪拉斯艦隊與荊揚軍樂團之間
************

發表數: 3,158
所屬群組: 一般
註冊日期: 9-18-2003

活躍:11
聲望:685


29 Q_Q

2問題

e.g:
name: ada, ada1

1. 我在query中使用like,search word舉例打了"ada",那應該照理說結果會出"ada","ada1"。但我做完結果只出"ada",變成了一定要精準搜索。

2. 參考附件的29_01.jpg,我query方法還是用了元直和高的那個= =,因為用這個方法我起碼知道我自己在作什麼。不過Submit=Search連我自己也找不到在code的那裡出來的(汗)。

把php都放到附件參考。

=_=

p.s: 靠,買了張電腦桌搬回家自己裝,結果有位置裝錯裝了近2小時才完工,再把舊的拆,清潔,把電腦重新插線......etc,攪完,十二點多wtf

p.s2: 攪了一個upload.php,想把upload了的圖在upload的同時自動放入一個album內(就當是一個普通有table的html在一格格內裝著一張張圖的那種),要如何作?_?。如果有tut或example給就好了Q_Q,雖然有很多OPEN SOURCE,但不想抄了一多堆東西自己又一點都看不懂=_=。

我也覺得自己真的滿29和麻煩的orz,thx all helper 囧

附加檔案 ( 下載次數: 52 )
附加檔案  29QQ.rar


--------------------
user posted image
PMEmail Poster
Top
徐元直
發表於: Dec 9 2008, 00:53  評價+1
Quote Post


攤抖首領
************

發表數: 7,913
所屬群組: 君主
註冊日期: 9-18-2003

活躍:60
聲望:4176


QUOTE
1. 我在query中使用like,search word舉例打了"ada",那應該照理說結果會出"ada","ada1"。但我做完結果只出"ada",變成了一定要精準搜索。

有些簡單問題真的需要別人回答嗎?其實你google一下馬上就能知道答案了,要養成自己查資料的好習慣,依賴網絡好過依賴別人。

e.g.
http://www.google.com/search?sourceid=navc..._208&q=SQL+like
http://dev.mysql.com/doc/refman/5.0/en/str...l#operator_like

user posted image

好了,開個玩笑而已。如果你想尋找任何包含ada的字串,請使用%ada%。如果你有更複雜的搜尋需求,學一下regular expression吧,找東西時很有用的。

http://dev.mysql.com/doc/refman/5.0/en/regexp.html

QUOTE
2. 參考附件的29_01.jpg,我query方法還是用了元直和高的那個= =,因為用這個方法我起碼知道我自己在作什麼。不過Submit=Search連我自己也找不到在code的那裡出來的(汗)。

這裡出來的:
CODE
<input type="submit" name="Submit" value="Search">


QUOTE
p.s2: 攪了一個upload.php,想把upload了的圖在upload的同時自動放入一個album內(就當是一個普通有table的html在一格格內裝著一張張圖的那種),要如何作?_?。如果有tut或example給就好了Q_Q,雖然有很多OPEN SOURCE,但不想抄了一多堆東西自己又一點都看不懂=_=。

upload後把圖片位址加入一個list(可以是檔案或者sql table),顯示時用php產生一個包含list中的所有圖片的頁面就好了。

本篇文章已被 徐元直 於 Dec 9 2008, 00:55 編輯過


--------------------
......
PMEmail Poster
Top
高長恭
發表於: Dec 9 2008, 14:10  評價+1
Quote Post


∼('▽'*)
*********

發表數: 1,054
所屬群組: 太守
註冊日期: 9-18-2003

活躍:9
聲望:435



Regular expression雖然是很好很強大的東西,但是要學會它的語法不容易的。
而且不會有太多使用者會期望搜尋功能會支援Regular expression吧?
別強人所難了

QUOTE
2. 參考附件的29_01.jpg,我query方法還是用了元直和高的那個= =,因為用這個方法我起碼知道我自己在作什麼。不過Submit=Search連我自己也找不到在code的那裡出來的(汗)。

submit button的特性就是用它去submit form時,瀏覽器就會將那個掣的name跟value放到queryString上,如果你在text field (input type=text)輸入文字後按enter submit的話,Submit=Search就不會出現了。
當一張form有多過一個submit buttom時,可以用submit掣的name判斷如何處理form data
由於你form的method是get,submit的data都會貼到URL上,如果不想Submit=Search出現的話,可以試試用
CODE
<input type='button' name='Submit' value='Search' onclick='document.form.submit()' />

即是用一個普通的button取代submit button,當點擊這個掣時就會觸發submit form的event

QUOTE
p.s2: 攪了一個upload.php,想把upload了的圖在upload的同時自動放入一個album內(就當是一個普通有table的html在一格格內裝著一張張圖的那種),要如何作?_?。如果有tut或example給就好了Q_Q,雖然有很多OPEN SOURCE,但不想抄了一多堆東西自己又一點都看不懂=_=。

如果那個'album'指的是move_uploaded_file的target folder,而且那個folder只放了上傳的圖片,用scandir()這個function好了
http://hk2.php.net/manual/en/function.scandir.php
不過get完array之後請自己移走.同..這兩個element

本篇文章已被 高長恭 於 Dec 10 2008, 04:02 編輯過


--------------------
user posted image
PMEmail PosterUsers WebsiteIntegrity Messenger IM
Top
1 位使用者正在閱讀本主題 (1 位訪客及 0 位匿名使用者)
0 位會員:

Topic Options Reply to this topicStart new topicStart Poll

 



[ Script Execution time: 0.0191 ]   [ 12 queries used ]   [ GZIP 啟用 ]