</b>", $name);\r\n\t \r\n\t echo "<li onselect=\"this.setText('$name').setValue('$id');\">$display_name</li>";\r\n\t}\r\n\tmysql_close();\r\n\t?>\r\n\t ","dateCreated":"2010-10-16T11:51:03+0700","author":{"@type":"Person","name":"zraptor80@hotmail.com","url":"https://www.goragod.com/index.php"},"upvoteCount":0,"url":"https://www.goragod.com/forum.html?wbid=2659#R_5505"},{"@type":"Answer","text":"เข้าใจว่า ที่ทำงาน น่าจะเป็น IE7 มั้ง\n\nถ้าใช่ ลองเปลี่ยน tag เป็น tag อื่น ที่ไม่ใช่ li เช่น อาจใช้ p สำหรับแต่ละแถว แทน\n\nหรือ ลองดูตามนี้ IE 8 มันมากับเรื่องปวดหัว","dateCreated":"2010-10-16T12:42:09+0700","author":{"@type":"Person","name":"goragod","url":"https://www.goragod.com/index.php"},"upvoteCount":0,"url":"https://www.goragod.com/forum.html?wbid=2659#R_5506"}]}}]

query หลักแสน

ขอความรู้หน่อยครับ

หากเราต้องการ query ข้อมูลหลักแสน records สำหรับ dropdown มีวิธีไหนที่จะ query เร็วๆ บ้างครับ

10 ต.ค. 2553 10 2,423

ไม่มีครับ



ว่าแต่ แสน record จะ หากันเจอมั้ยเนี่ย...



โดยปกติ ก็ควรจัด query เพื่อทำการสรุปข้อมูลออกมาก่อนแหละครับ เพื่อลดจำนวนข้อมูลที่ต้องการออกให้เหลือน้อยที่สุด หรือ อาจใช้วิธีการสร้าง View ก้ได้ครับ
#1


หาเจอครับ ใน ie จะ not responding ก่อน ถึงจะโหลดได้ แต่ในบางเครื่องก็ไม่ได้ 

ฟอร์มหน้านั้นเลยอืดมาก



ขอบคุณครับ


#2

ก็คงใช่แหละครับ..



ปัญหาคงไม่ได้อยู่ที่ query จาก Server เพียงอย่างเดียวครับ จำนวนข้อมูลที่มากมายขนาดนั้น  จะทำให้เว็บโหลดช้า จนถึงทำงานช้าได้ครับ
#3

อย่าว่าแต่แสนเลยครับแค่ 5000 ก็ค้างแล้ว

#4


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



ก่อนจะมาเป็นดรอบดาวน์อันนี้ น่าจะให้ผู้ใช้ระบุข้อมูลให้แคบลงก่อนน่าจะดีกว่านะครับ หรือถ้ามันไม่สามารถระบุให้แคบลงได้ ก็ใช้หน้าของการเลือกข้อมูลแสนรายการนี้เป็นการดำเนินการขั้นตอนก่อนจะไปหน้าต่อไปก็ได้



ผมมองว่าการคอนเนคชั่นบ่อยๆ น่าจะดีกว่าคิวรี่นานๆ ทั้งนี้ขึ้นอยู่กับระบบแต่ละระบบนะครับ


#5

มีคำแนะนำเพิ่มเติมนะครับ...



อาจใช้วิธีการโหลดด้วย Ajax ก็ได้นะครับ โดยการใช้หลักการเหมือน จังหวัด อำเภอ ตำบล ด้วย Ajax โดยการแบ่งกลุ่มของข้อมูลออกเป็นกลุ่มๆ (แล้วแต่ความสัมพันธ์ของข้อมูล) หรือ ถ้าหาความสัมพันธ์ไม่ได้ อาจต้องใช้วิธีแบ่งตามตัวอักษร ก้ได้ครับ



คำแนะนำที่จำเป็น เพื่อให้โหลดเร็ว และหาข้อมูลที่ต้องการได้ง่าย ควรจัดแบ่งกลุ่มของข้อมูลออกเป็นกลุ่มย่อยๆ ให้ข้อมูลในแต่ละกลุ่มเล็กที่สุด อาจจะมีหลายๆกลุ่มก็ได้ โดยพยายามดูจากพฤติกรรมของผู้ใช้ (เดา) ว่าผู้ใช้ น่าจะพยายามมองหาข้อมูลอะไรก่อน เป็นลำดับจาก dropdown



ยกตัวอย่างเช่น การหาตำบล ควรเริ่มจาก การหาจังหวัดก่อน แล้วก็ไปเลือกอำเภอ แล้วจึงไปเลือกตำบล ซึ่งจะทำให้หาง่ายกว่า การแสดงรายการตำบลทั้ง 77 จั้งหวัด ในลิสต์รายการเดียวให้หา 
#6


ข้อมูลที่นำมาใช้เป็นข้อมูลของชื่อเรือครับ ไม่สามารถคัดกรองได้ เวลาหาก้อหาทั้งหมดทีเดียว



กำลังคิดถึงวิธีของการทำ autocomplete ครับ แต่ในเว็บนี้ เท่าที่หาดูยังไม่มีครับ(รึเปล่า)

ลองหาจากข้างนอก ก้อมีเยอะ แต่ที่ใช้กับภาษาไทยได้ยังไม่มี

มีคำแนะนำเกี่ยวกับเรื่องนี้มั๊ยครับ



หรืออีกวิธีนึงก้อคือทำ popup ขึ้นมาให้เลือกแล้ว return ค่ากลับมายัง main form

เท่าที่คิดได้ตอนนี้ครับ


#7

#8

query หลักแสน


ขอบคุณครับ



ตอนนี้ผมเปลี่ยนจาก dropdown มาเป็น auto complete แล้วครับ ก็ได้ผลดีขึ้นเยอะ หลักการทำงานก็เหมือนกับ คห.8 คือหาจากตัวแรกก่อนแล้วจากนั้นก้อหาจากกลุ่มของชุดแรกที่ค้นเจอ



แต่ทีนี้ติดปัญหานิดนึงครับ

ทดสอบกับ google chrome สามารถแสดงรายการได้ปกติ

ทดสอบกับ firefox สามารถแสดงรายการได้ปกติ

ผมทดสอบกับ ie ที่บ้านทำงานได้ปกติ

แต่ที่ทำงาน มันแสดงรายการลิสมาให้ แต่ไม่มีตัวอักษร ในรายการ ต้องเอาเมาท์คลิก ถึงจะ return ค่ากลับมาใส่ text box

ผมต้องแก้ยังไงครับ







<input name="vesselName" type="text" id="vesselName" size="50" />

<input name="VesselId" type="hidden" id="VesselId" value="" />



<script type="text/javascript">



function make_autocom(autoObj,showObj){

 var mkAutoObj=autoObj;

 var mkSerValObj=showObj;

 new Autocomplete(mkAutoObj, function() {

  this.setValue = function(id) {  

   document.getElementById(mkSerValObj).value = id;

  }

  if ( this.isModified )

   this.setValue("");

  if ( this.value.length < 1 && this.isNotClick )

   return ; 

 // return "gdata.php?q=" + this.value;

  return "gdata.php?q=" + decodeURIComponent(this.value);



    }); 



make_autocom("vesselName","VesselId");



</script>



//-----------------------------------------------------

gdata.php



<?php


header("Content-type:text/html; charset=tis-620");    


// เชื่อมต่อฐานข้อมูล

$link=mysql_connect("localhost","xxx","yyy") or die("error".mysql_error());

mysql_select_db("xy",$link);

mysql_query("SET NAMES TIS620");


$q = $_GET["q"];


$pagesize = 50; // จำนวนรายการที่ต้องการแสดง

$table_db="tblvessel"; // ตารางที่ต้องการค้นหา

$find_field="vesselName"; // ฟิลที่ต้องการค้นหา

echo $sql = "select * from $table_db  where locate('$q', $find_field) > 0 order by locate('$q', $find_field), $find_field limit $pagesize";

$results = mysql_query($sql);

while ($row = mysql_fetch_array( $results )) {

 $id = $row["RecId"]; // ฟิลที่ต้องการส่

 $name = ucwords( $row["vesselName"] ); // ฟิลที่ต้องการแงค่ากลับ

 //$name = ucwords( ( $row["vesselName"] ) ); // ฟิลที่ต้องการแงค่ากลับ

 // ป้องกันเครื่องหมาย '

 $name = str_replace("'", "'", $name);

 // กำหนดตัวหนาให้กับคำที่มีการพิมพ์


 $display_name = preg_replace("/(" . $q . ")/i", "<b></b>", $name);

 

 echo "<li onselect=\"this.setText('$name').setValue('$id');\">$display_name</li>";

}

mysql_close();

?>

 

#9

เข้าใจว่า ที่ทำงาน น่าจะเป็น IE7 มั้ง



ถ้าใช่ ลองเปลี่ยน tag เป็น tag อื่น ที่ไม่ใช่ li เช่น อาจใช้ p สำหรับแต่ละแถว แทน



หรือ ลองดูตามนี้ IE 8 มันมากับเรื่องปวดหัว
#10
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^