Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > รบกวนพี่ๆครับ ช่วงนี้ถามบ่อยมากครับ เรื่อง ระบบ search mysql ครับ



 

รบกวนพี่ๆครับ ช่วงนี้ถามบ่อยมากครับ เรื่อง ระบบ search mysql ครับ

 



Topic : 136176



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์




ภาพประกอบ
ผมลองใช้โค้ดนี้ ลองค้นหาข้อมูล 2 ชุดดูครับ ปรากฎว่ามันไม่ออกครับ

จะค้นชื่อ 2 ชื่อ ซึ่งปกติผลลัพธ์มันจะ แสดงในตาราง 2 แถว ใช่ไหมครับ เพราะ
Code (PHP)
strKeyword คือ texbox ค้นหาครับ จริงๆ อยากให้มันเทียบทุกฟิล ในตารางเลยโดยไม่ต้องกำหนดทีละ คอลั่ม ไม่รู้ทำได้ไหมครับ
$strgroup คือ checkbox //อนาคตตัวนี้ต้องสามามรถไขว้กันได้ทุกตัวครับ ยังไม่รู้จะเขียนยังไงครับ คิดว่าน่าจะปรับจากโค้ด ด้านล่างได้ครับ

$sql = "select * from tb_criminal1 WHERE criminal_fname LIKE '%$strKeyword%' AND group_arrest LIKE '%$strgroup%'


รบกวนพี่ๆหน่อยครับ
หมายเหตุ ผมลองใช้คำสั่งรูปแบบนี้ SELECT * FROM xxx WHERE aaa LIKE '%[key1,key2]%' มันก็ไม่ออกครับ

ขอบพระคุณครับ



Tag : PHP, MySQL









ประวัติการแก้ไข
2021-06-08 15:21:39
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2021-06-08 15:20:40 By : gmgo View : 1121 Reply : 17
 

 

No. 1



โพสกระทู้ ( 2,311 )
บทความ ( 1 )



สถานะออฟไลน์


ลองใช้ CONCAT() ครับ เช่น
Code (PHP)
SELECT * FROM xxx WHERE CONCAT(field1,' ',field2) LIKE '%$key%' 







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-08 20:21:59 By : arm8957
 


 

No. 2



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์


กรณีคอน ตอบความคิดเห็นที่ : 1 เขียนโดย : arm8957 เมื่อวันที่ 2021-06-08 20:21:59
รายละเอียดของการตอบ ::
ใช้ concat ได้ครับ แต่ถ้าจะ ไขว้ กับตัว check box มันไม่ยอมออกครับ
แบบว่า เลือกcheckbox ด้วย กรอก keyeord ด้วยครับ เพราะว่าข้อมูลที่จะลง db เตรียมใว้มีประมานหลายพัน record เลยครับ ก็เลยคิดว่า ในกลุ่มเงื่อนไขการค้นหา ถ้าระบุ สโคปการค้นให้แคบลงข้อมูลจะได้ออกมาไม่กี่แถวที่ตรงๆกันเท่านั้นครับ


Code (PHP)
$sql = "select * from tb_criminal1 WHERE concat(criminal_fname,',',criminal_lname,',',group_arrest,',',id_card) LIKE '%$strKeyword%' OR LIKE '%$strgroup%' limit {$start} , {$perpage} ";



ประวัติการแก้ไข
2021-06-08 23:17:06
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-08 22:47:33 By : gmgo
 

 

No. 3



โพสกระทู้ ( 296 )
บทความ ( 0 )



สถานะออฟไลน์


https://stackoverflow.com/questions/16034367/mysql-php-multiple-keyword-search

เลือกที่ชอบๆ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-08 23:28:18 By : TheGreatGod_of_Death
 


 

No. 4



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : TheGreatGod_of_Death เมื่อวันที่ 2021-06-08 23:28:18
รายละเอียดของการตอบ ::
ผมไล่อ่านๆดูแล้วก็งงครับ บางโค้ดก็ผิดใช้ไม่ได้เวลามาลองรันดู

ก็เลยพอจะนึกออกว่าแบบเดียวกับ เว็บบิตทอเร้นเลยครับ เค้าเขียนระบบค้นหา ไพล์ หน้าเบราว์ยังไงครับ แบบติ๊กได้อิสระเลย เวลาค้นหา

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-09 01:39:33 By : gmgo
 


 

No. 5



โพสกระทู้ ( 2,311 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 2 เขียนโดย : gmgo เมื่อวันที่ 2021-06-08 22:47:33
รายละเอียดของการตอบ ::
ใช้วิธีการต่อสตริงครับ
Code (PHP)
//Ex
$key = ($_GET['search'] != '') ? $_GET['search'] : NULL;
$checklist1 =  ($_GET['checklist1'] != '') ? $_GET['checklist1'] : NULL;
$checklist2 =  ($_GET['checklist2'] != '') ? $_GET['checklist2'] : NULL;
$checklist3 =  ($_GET['checklist3'] != '') ? $_GET['checklist3'] : NULL;
$date_start =  ($_GET['date_start'] != '') ? $_GET['date_start'] : NULL;
$date_end =  ($_GET['date_end'] != '') ? $_GET['date_end'] : NULL;
$sql = " SELECT * FROM xxx WHERE 1 ";
$sql .= ! empty($key) ? " AND CONCAT(field1,' ',field2) LIKE '%$key%' " : "";
$sql .= ! empty($checklist1) ? " AND field?? LIKE '%$checklist1%' " : "";
$sql .= ! empty($checklist2) ? " AND field?? LIKE '%$checklist2%' " : "";
$sql .= ! empty($checklist3) ? " AND field?? LIKE '%$checklist3%' " : "";
$sql .= ( ! empty($date_start) && ! empty($date_end) ) ? " AND field_date BETWEEN '$date_start' AND '$date_end' " : "";

!ปล. นี่คือตัวอย่าง กรุณาตรวจสอบเงื่อนไขการดึงข้อมูลตามที่ต้องการ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-09 11:35:59 By : arm8957
 


 

No. 6



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : arm8957 เมื่อวันที่ 2021-06-09 11:35:59
รายละเอียดของการตอบ ::
มัน Error ตัวแปรครับ
Notice: Undefined index: txtKeyword in /Applications/XAMPP/xamppfiles/htdocs/eds-csd/views/operation1-detail.php on line 28

Notice: Undefined index: group1 in /Applications/XAMPP/xamppfiles/htdocs/eds-csd/views/operation1-detail.php on line 29

Notice: Undefined index: group2 in /Applications/XAMPP/xamppfiles/htdocs/eds-csd/views/operation1-detail.php on line 30

Notice: Undefined index: group3 in /Applications/XAMPP/xamppfiles/htdocs/eds-csd/views/operation1-detail.php on line 31

Notice: Undefined index: group4 in /Applications/XAMPP/xamppfiles/htdocs/eds-csd/views/operation1-detail.php on line 32

Notice: Undefined index: group5 in /Applications/XAMPP/xamppfiles/htdocs/eds-csd/views/operation1-detail.php on line 33

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in /Applications/XAMPP/xamppfiles/htdocs/eds-csd/views/operation1-detail.php on line 46

Code (PHP)
$strKeyword = ($_GET['txtKeyword'] != '') ? $_GET['txtKeyword'] : NULL;
    $checklist1 =  ($_GET['group1'] != '') ? $_GET['group1'] : NULL;
    $checklist2 =  ($_GET['group2'] != '') ? $_GET['group2'] : NULL;
    $checklist3 =  ($_GET['group3'] != '') ? $_GET['group3'] : NULL;
    $checklist4 =  ($_GET['group4'] != '') ? $_GET['group4'] : NULL;
    $checklist5 =  ($_GET['group5'] != '') ? $_GET['group5'] : NULL;
    //$date_start =  ($_GET['date_start'] != '') ? $_GET['date_start'] : NULL;
    //$date_end =  ($_GET['date_end'] != '') ? $_GET['date_end'] : NULL;
    $sql = " SELECT * FROM criminal1 WHERE 1 ";
    $sql .= ! empty($strKeyword) ? " AND CONCAT(criminal_fname,',',criminal_lname,',',group_arrest,',',id_card) LIKE '%$strKeyword%' " : "";
    $sql .= ! empty($checklist1) ? " AND group_arrest LIKE '%$checklist1%' " : "";
    $sql .= ! empty($checklist2) ? " AND group_arrest LIKE '%$checklist2%' " : "";
    $sql .= ! empty($checklist3) ? " AND group_arrest LIKE '%$checklist3%' " : "";
    $sql .= ! empty($checklist4) ? " AND group_arrest LIKE '%$checklist4%' " : "";
    $sql .= ! empty($checklist5) ? " AND group_arrest LIKE '%$checklist5%' " : "";
    //$sql .= ( ! empty($date_start) && ! empty($date_end) ) ? " AND field_date BETWEEN '$date_start' AND '$date_end' " : "";
    echo $query = mysqli_query($con, $sql);

    while($result=mysqli_fetch_array($query,MYSQLI_ASSOC)){

        echo $sql; 
    }

ผมเขียนถูกไหมครับ 5555 น่าจะมั่วที่ผม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-09 12:54:30 By : gmgo
 


 

No. 7



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


Code (PHP)
echo $var;// error เพราะไม่ได้ประกาศใช้ตัวแปร

$var = array();
echo $var['index'];// error เพราะไม่ได้กำหนด index, key

if (isset($var['index'])) {
    echo $var['index'];// ไม่ error เพราะตรวจก่อนแล้ว
}


echo (isset($var['index']) && $var['index'] !== '' ? $var['index'] : '');
// ถ้าเขียนแบบยาวจะเป็น
if (isset($var['index']) && $var['index'] !== '') {
    echo $var['index'];
} else {
    echo '';
}

// -----------------------------
// ข้อควรระวัง
// isset ตรวจแม้กระทั่ง null
$var = array(
    'index' => null,
);
var_dump(isset($var['index']));// จะได้ false ทั้งที่มันมีตัวแปรและมี array index นี้อยู่แท้ๆ
// วิธีแก้ถ้าต้องตรวจว่ามันมี key นี้จริงๆแม้จะ null ก็ตาม
var_dump(array_key_exists('index', $var));// จะได้ true.



ประวัติการแก้ไข
2021-06-09 19:58:04
2021-06-09 19:59:57
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-09 19:56:44 By : mr.v
 


 

No. 8



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 7 เขียนโดย : mr.v เมื่อวันที่ 2021-06-09 19:56:44
รายละเอียดของการตอบ ::
พยามตามโค้ดและไล่ถึงความสัมพันธ์ ที่พี่เขียนให้ดู แต่ก็ไม่เข้าใจ5555 เวลไม่ถึงจริงๆครับ

ทีแรก ผมคิดว่า ถ้าหาก ตัว Checkbox เก็บเป็น Array น่าจะส่งค่าไป mysql ได้ โดยน่าจะมี syntax อะไรสักอย่างมาเชื่อม
เพราะรอง echo ออก มาดู ค่าที่ได้เป็น a1,a2 แต่พอใส่ตัวแปรใน mysql มันน่าไจะไม่รู้จัก ก็เลยตัด , ได้เป็น a1a2 ปรากฎว่าค้นหาไม่เจอ
แต่ถ้า เป็น a1 หรือ a2 ค่าเดียวกับหาเจอ ทั้งๆที่มันควร จะวิ่งไปเทียบ a1a2 มีคำไหนที่เหมือนกัน ผมเข้าใจผิด ใช่ไหมครับ

และจึงมานั่งคิดเล่นๆว่า ถ้าใส่แค่ค่าเดียวแล้วมันค้นเจอ แสดงว่ามันทำการค้นแค่ครั้งเดียว แต่ถ้าเราส่งค่าตัวแปรที่เป็น Array ให้มัน ในตัวคำสั่ง mysql ก็ต้องอยู่ ภายใต้ loop เช่น $A,$B,$C เท่ากับว่ามันต้องวิ่งเทียบทีละคำสั่ง พอครบละค่อย return ผลลัพธืกลับมา เป็น
$A1=xxx
$A2=xxx
$A3=xxx
ถ้าผมเข้าใจถูก มันต้องเขียน loop ยังไงครับ และหากเข้าใจผิด รบกวนพี่อธิบายให้หน่อยครับ

ถ้าไม่ได้จริงๆ ผมคงต้องกลับไปดู เรื่อง Switch case และ ทำที่ละเคส แบบประมาณว่า
7ตัวเลือก ก็เอามันมาจับคู่กัน ซึ่ง ผมก็ไม่รู้ว่า มันจะได้กี่คำสั่ง กว่าจะไขว้กันครบ ก็เลยนึกถึง เว็บบิต ว่าเค้าเขียนยังไง มี ตั้ง 20 กว่า Checkbox

มันจำเป็นต้องทำ เพราะว่า ต้องเอาผลลัพธ์ตัวนี้ไปทำเป็นกราฟสถิติ โดยผู้ใช้จะเรียกดู เคสไหนกับเคสไหนก็ได้ และช่วงเวลาไหนก็ได้ ซึ่งยากขึ้นไปอีก คิดแล้วท้อจริงๆครับ กับความเป็นมือใหม่ แต่ได้งานใหญ่มาทำคนเดียว อุส่าทิ้งไอทีตั้งแต่จบหนีมาสอบราชการ สุดท้ายได้กลับมาทำอีก5555 รบกวนด้วยนะครับ



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-09 23:36:59 By : gmgo
 


 

No. 9



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ที่บอกไปแก้ปัญหา Notice: Undefined index อย่างเดียว

ถ้าไม่เข้าใจให้สร้างไฟล์ใหม่ขึ้นมาเพื่อทดลอง อย่าไปเขียนเลยในโปรเจ็ค เพราะมันจะไม่รู้เรื่องถ้าไม่เข้าใจ
ทดลองก่อนจนเข้าใจตามที่บอก จนอ๋อนั่นแหละ ถึงค่อยเอาไปเขียนจริง

สร้างไฟล์เปล่าๆมาเขียน echo $var; รันดูมันว่ายังไงใช่อย่างที่บอกมั้ย

ลบทิ้งแล้วเขียน
$var = array();
echo $var['index'];
ดูว่ามันว่าไงใช่อย่างที่บอกมั้ย

แก้บรรทัด echo เอาอันนี้ใส่
if (isset($var['index'])) {
echo $var['index'];// ไม่ error เพราะตรวจก่อนแล้ว
}
ดูมันเป็นยังไง

ไล่ลองไปเรื่อยๆจนกว่าจะเข้าใจมัน

แล้วก็อ่าน

https://www.php.net/manual/en/function.isset.php
https://www.php.net/manual/en/function.array-key-exists.php
เอกสารจากทาง php เอง
แล้วจะใช้แบบไหนก็เลือกเอา
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-10 00:43:43 By : mr.v
 


 

No. 10



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์


ทำได้แล้วครับขอบคุณครับทุกท่าน

ประยุกต์ เอารูปแบบการต่อสตริง มาใช้ ร่วมกับ IF else และใช้ คำสั่ง strpos เช็ค where เอาแล้วค่อยเอาไปต่อ คำสั่ง select*from where xxx....

ใช้ OR และ IN(ผลลัพธ์ array1,ผลลัพธ์ array2,ผลลัพธ์ array3..ผลลัพธ์ arrayN)Code

[head]Code (PHP)

<th>
							<tr> <!---->
								<td><input type="checkbox" name="group[]" id="group1" class="form-check-input" value="g1" > </input></td>
								<td>กลุ่ม1 ฐานความผิดเกี่ยวกับชีวิต ร่างกาย ฯ </td>
								<td>&nbsp;&nbsp;</td>
								<td><input type="checkbox" name="group[]" id="group4" class="form-check-input" value="g4"> </input></td>
								<td>กลุ่ม4 ฐานความผิดที่รัฐเป็นผู้เสียหาย</td>
								<td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
								<td rowspan="3">วันที่</td>
								<td rowspan="3"><input type="date" name="start_date" id="start_date" class="form-control" > </input></td>
								<td rowspan="3">ถึง</td>
								<td rowspan="3">วันที่</td>
								<td rowspan="3"><input type="date" name="end_date" id="end_date" class="form-control"> </input></td>
								
							</tr>
							<tr>
								<td><input type="checkbox" name="group[]" id="group2" class="form-check-input" value="g2" > </input></td>
								<td>กลุ่ม2 ฐานความผิดเกี่ยวกับทรัพย์</td>
								<td>&nbsp;&nbsp;</td>
								<td><input type="checkbox" name="group[]" id="group5" class="form-check-input" value="g5"> </input></td>
								<td>กลุ่ม5 ฐานความผิดอื่นๆ</td>
							</tr>
							<tr>
								<td><input type="checkbox" name="group[]" id="group3" class="form-check-input" value="g3"> </input></td>
								<td>กลุ่ม3 ฐานความผิดพิเศษ</td>		
								<td>&nbsp;&nbsp;</td>
								
							</tr>
							<tr align="center">
								<td colspan="11">
								</br> <div class="input-group" style="width: 750px" align="center">
								<input type="text" name="txtKeyword"  class="form-control form-control-lg" value="" placeholder="ใส่คำที่ต้องการค้นหา" >
								  <button class="btn-lg btn-primary" type="submit"> ค้นหา
								  </button>
									</div>
								</td>
							</tr>
						
						</th>
						</table>




อันนี้เป็นรูปแบบการเก็บค่าตัวแปร ที่ คุณ mr.v แนะนำ ผมลองใช้ดูจนเข้าใจรูปแบบมันละ ก็เลยจัดให้เป็นแบบนี้
Code (PHP)
if (isset($_POST['txtKeyword']) && $_POST['txtKeyword'] !== '') {
    $strKeyword=$_POST['txtKeyword'];
 }else{

    echo '';
 }
 if (isset($_POST['group']) && $_POST['group'] !== '') {
    $strgroup=implode("','", $_POST['group']);
 }else{

    echo '';
 } 



(PHP)[/head]
$sql="select * from tb_criminal1";

if(!empty($strKeyword)) {  //ถ้าตัวแปร strKeyword ไม่ว่าง คือมีการกรอกข้อมูลเข้ามาผ่านทาง textbox ค้นหา
 $sql.=" where criminal_fname like '%$strKeyword%'  ";  //การต่อประโยคเงื่อนไข ใช้เครื่องหมาย .= จะเพิ่มคำเข้าไปในตัวแปรได้ 
}
// กรณีมีการเลือก checkbox คู่กับการกรอกช่องค้นหา เพื่อค้นหาให้แคบลง เพิ่มคำสั่งด้านล่าง 
if(!empty($strgroup)) {  //  ถ้าค้นหาค่า strgroup มาด้วย  ตัวนี้คือ checkboxที่รับค่าเป็น array จากฟรอม
       $pos = strpos($sql, "where");  //ใช้คำสั่ง strpos หาคำว่า where ใน $sql="select * from tb_criminal1";
                if ($pos == true) {  // ถ้าเจอคำว่า where จริง ให้ทำเงื่อนไขด้านล่าง
                    $sql.="OR group_arrest IN('$strgroup') ";  //ถ้ามีคำว่า where ให้ใส่ OR group_arrest IN('$strgroup') 
                } else {  
                    $sql.=" where group_arrest IN('$strgroup') ";  //ถ้าไม่มีคำว่า where ให้ใช้คำสั่ง where group_arrest IN('$strgroup')ไปต่อ
                                                                                            //คำสั่ง select sql ด้านบน
                }  
}


ผมเองก็เพิ่งทราบว่า OR group_arrest IN('$strgroup') มันช้แบบนี้ได้หาอยู่นานลองสลับมั่วๆดู
กรณีที่ต้องการ ค้นหาข้มูล ในคอลัมเดียวกัน มากกว่า 1 คีย์เวิด โดย ใช้ OR ไม่ได้ หรือผมเขียนไม่เป็น เลยเห็นจาก stacoverflow .ใช้ IN(1,2,3..) แต่คำสั่งนี้มันก็มีปัญหา ว่ากรณีข้อความ ต้องมี ' ' ปกติ impolde(',',$_POST['']); ค่าจะได้ 1,2,3 วิธีคือ impolde("','",$_POST['']);
-ข้อมูลจะตรงรูปแบบ 'a1','a2' ก็จะใช้ได้ละครับ

ผมไล่ code และอธิบายให้ออกมาในรูปแบบที่ผมเข้าใจ สำหรับผิดพลาดประการใดก็ขออภัยด้วยนะครับ บางทีอาจจะมีหลายท่านกำลังตามหาแบบผมอยู่นะครับ

ตอนนี้จะได้ไปดูส่วน ของ กราฟต่อครับ ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-10 14:52:58 By : gmgo
 


 

No. 11



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


การใช้ var in ('xx','yy','zz') มันมีข้อจำกัด ว่าสิ่งที่หา กับ ฟีลด์ที่หา ต้องเหมือนกันเป๊ะ
คือ var ต้องเท่ากับ xx หรือ var ต้องเท่ากับ yy หรือ var ต้องเท่ากับ zz

แต่ถ้าจะหา xx อยู่ใน var หรือ yy อยู่ใน var หรือ zz อยู่ใน var
ใช้ แบบนี้ จะครอบคลุมมากกว่า
( fieldname like '%search1%' or fieldname like '%search2%' or fieldname like '%search3%')

หรือหันไปใช้ regular expression
or ( fieldname REGEXP '(search1|search2|search3)' )
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-10 15:40:19 By : Chaidhanan
 


 

No. 12



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 11 เขียนโดย : Chaidhanan เมื่อวันที่ 2021-06-10 15:40:19
รายละเอียดของการตอบ ::
( fieldname like '%search1%' or fieldname like '%search2%' or fieldname like '%search3%')
ผมคิดว่ากรณีแบบนี้น่าจะเหมากับ Input ที่ไม่ fix ค่า มากกว่าใช่ไหมครับ
แต่ถ้าเป็นแบบ ตัวแปรที่มีค่าคงที่ เชื่อน checkbox1='g1' แบบนี้น่าจะไม่มีปัญหาครับ เพราะบังคับให้เป็นคำนี้เลย ส่วนใน texboxsearch ก็ยังคงใช้เป็น %var% แต่สุดท้ายแล้ว การค้นหามันก็ยังคงได้แค่ระดับ 1 ยังไม่เท่า search Engine ที่พิมคำผิดแล้วเดาเป็นคำที่ถูกต้องให้ หรือผมอาจจะพัฒนาต่อโดย เอา API ของระบบใหญ่ มาเป็นตัว Query แบบว่า เวลาพิมก็จะเดาข้อมูลขุ้นมาโชว์ให้เลยประมาณนี้ แต่คง phase หน้า


แต่ว่าตอนนี้ติดปัญหานี้แทนครับ แบ่งหน้าไม่ได้
$sql .= "limit {$start} , {$perpage}"; ผมจะเอา limit ไปต่อตรงไหนของ mysql ดีครับ โดยไม่ให้กระทบกับเงื่อนไขด้านล่าง
ผมเข้าใจว่ามันจะอยู่ท้ายสุดของชุดคำสั่ง sql แต่พอลองวางแล้วกลับ error
Code (PHP)
$sql="select * from tb_criminal1";
////
if(!empty($strKeyword)) {  //ถ้าตัวแปร productname ไม่ว่าง คือมีการกรอกช่องค้นหาชื่อสินค้ามาด้วย
 $sql.=" where concat(criminal_fname,',',criminal_lname,',',group_arrest,',',id_card) like '%$strKeyword%'  ";  //การต่อประโยคเงื่อนไข ใช้เครื่องหมาย .= จะเพิ่มคำเข้าไปในตัวแปรได้ 
 $sql .= "limit {$start} , {$perpage}";
}
// กรณีระบุค่า price เพื่อหาสินค้าและราคามาทั้งสองอย่าง เพิ่มคำสั่งด้านล่าง 
if(!empty($strgroup)) {  //  ถ้าค้นหาค่า price มาด้วย  
       $pos = strpos($sql, "where");  //ใช้คำสั่ง strpos หาคำว่า where ในตัวแปร sql
                if ($pos == true) {  // ถ้าเจอคำว่า where ในตัวแประ $sql
                    $sql.="OR group_arrest IN('$strgroup')";  //ถ้ามีคำว่า where แล้วในตัวแปร sql ให้ใส่ and ต่อ
                  
                } else {  
                    $sql.=" where group_arrest IN('$strgroup') ";  //ถ้าไม่มีคำว่า where ให้ใช้ query นี้ต่อ
                
                }   
}

if(!empty($type_search)) {  //  ถ้าค้นหาค่า price มาด้วย  
    $pos = strpos($sql, "where");  //ใช้คำสั่ง strpos หาคำว่า where ในตัวแปร sql
             if ($pos == true) {  // ถ้าเจอคำว่า where ในตัวแประ $sql
                 $sql.=" AND type_arrest IN('$type_search') ";  //ถ้ามีคำว่า where แล้วในตัวแปร sql ให้ใส่ and ต่อ
                 
             } else {  
                 $sql.=" where type_arrest IN('$type_search') ";  //ถ้าไม่มีคำว่า where ให้ใช้ query นี้ต่อ
               
             }  
}



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-10 19:23:37 By : gmgo
 


 

No. 13



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


Code (PHP)
$str_select = 'select field1, field2, field3';
$str_from = 'table1, table2';
$str_where = 'field1 = 1';
$str_where .= ($str_where>''? ' and ' : '') . 'field2 = 2';
$sql = $str_select . ' from '.$str_from.' where '.$str_where.' limit xx, yyy';

แยกส่วนแบบนี้จะ dynamic มากกว่า นะครับ

แต่ที่สำคัญกว่านั้น เออเร่อร์ อะไรต้องแสดงมันออกมาด้วย จะได้รู้ว่าควรจะแก้ไขตรงไหน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-10 19:51:29 By : Chaidhanan
 


 

No. 14



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 13 เขียนโดย : Chaidhanan เมื่อวันที่ 2021-06-10 19:51:29
รายละเอียดของการตอบ ::

ถ้าใช้ if มาเช็คจะง่ายกว่าไหมครับ แต่นึดเงื่อนไขไม่ออกครับ

ผลลัพธ์ ครับ select * from tb_criminal1 where concat(criminal_fname,',',criminal_lname,',',group_arrest,',',id_card) like '%สม%' limit 0 , 5 AND type_arrest IN('1') limit 0 , 5
มันมี ลิมตมา2รอบ ผมลองวางดูครับ คิดว่าคงจะผิด รบกวนพี่ดูให้หน่อยครับ ถ้าใช้ if ได้ ผมน่าจะถนัดกว่าครับ



Code (PHP)
 เงื่อนไขที่1
if(empty($strKeyword) && empty($strgroup) && empty($type_search)){
    $sql="select * from tb_criminal1 limit {$start} , {$perpage}";//กรณีเป็นค่าว่างทั้งหมด
}else{
    $sql="select * from tb_criminal1 "; แต่ถ้าใส่ค่ามา หยิบตรงนี้ไปทำ
} 

if(!empty($strKeyword)) {  
 $sql.=" where concat(criminal_fname,',',criminal_lname,',',group_arrest,',',id_card) like '%$strKeyword%'  "; 
 $sql .= "limit {$start} , {$perpage}";/*ใส่แบบนี้error ครับ  */
}

if(!empty($strgroup)) {  
       $pos = strpos($sql, "where");  
                if ($pos == true) {  
                    $sql.="OR group_arrest IN('$strgroup') limit {$start} , {$perpage}"; 
                  
                } else {   //ถ้าไม่มีคำว่า where ให้ใช้ query นี้ต่อ
                
                }   $sql.=" where group_arrest IN('$strgroup') limit {$start} , {$perpage}";
}

if(!empty($type_search)) {  
    $pos = strpos($sql, "where");  
             if ($pos == true) {  
                 $sql.=" AND type_arrest IN('$type_search') limit {$start} , {$perpage}";  
                 
             } else {  
                 $sql.=" where type_arrest IN('$type_search') limit {$start} , {$perpage} ";  
               
             }  
}

ผลลัพธ์ตอน echo $sql ครับ select * from tb_criminal1 where concat(criminal_fname,',',criminal_lname,',',group_arrest,',',id_card) like '%สม%' limit 0 , 5 AND type_arrest IN('1') limit 0 , 5
มันมี ลิมตมา2รอบ ผมลองวางดูครับ คิดว่าคงจะผิด รบกวนพี่ดูให้หน่อยครับ ถ้าใช้ if ได้ ผมน่าจะถนัดกว่าครับ
เวลา มันจะ Error ตอน เราเลือก เงื่อนไข ตัวแปรที่ต่างกัน ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-10 20:40:18 By : gmgo
 


 

No. 15



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


แล้วจะรีบ ใส่มันทำไมล่ะครับ
ไว้จะคิวรี่ ค่อยใส่ก็ได้ มันไม่หายไปไหนหรอก 5555
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-10 20:48:20 By : Chaidhanan
 


 

No. 16



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 15 เขียนโดย : Chaidhanan เมื่อวันที่ 2021-06-10 20:48:20
รายละเอียดของการตอบ ::
ยังไม่ได้ครับ 5555 แต่คิดว่าถ้าทุกตัวแปรมันเป็นอิสระต่อกัน มันคงจำเป็นต้อง อยู่หลัง statement นั้นๆเสมอ ทำไงดีครับ แบบใส่ทีหลังสุด
พอนึกออกครับ ความหมายพี่ แต่เขียนไม่ออก ถ้าให้แปลคือ ก็ทำ
เงื่อนไขให้เสร็จก่อนได้ผลลัพมา เก็บไว้ในตัวแปรตัวใหม่ แล้วเอาตัวแบ่งหน้าไปต่อกันกับตัวแปรตัวใหม่ 555 แต่เขียนไม่เป็นครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-10 20:58:44 By : gmgo
 


 

No. 17



โพสกระทู้ ( 209 )
บทความ ( 1 )



สถานะออฟไลน์


ไม่ Error แล้วครับ 5555 แค่นี้เลย

Code (PHP)
$sql_limit="$sql limit {$start} , {$perpage}";
 echo  $sql_limit;//ทดสอบดู คำสั่ง
$query = mysqli_query($con, $sql_limit);


ขอบคุณครับผม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-10 21:16:01 By : gmgo
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนพี่ๆครับ ช่วงนี้ถามบ่อยมากครับ เรื่อง ระบบ search mysql ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่