|
|
|
[Redcap , SQL] ถามเรื่องการ Select ข้อมูลแบบ คำสั่ง IN แสดงผลผิดพลาด |
|
|
|
|
|
|
|
คือต้องบอกก่อนนะครับ Redcap มันเก็บ field ในตารางที่เราสร้าง เป็นข้อมูลตัวหนึ่งใน field ของมัน เช่น
ตาราง redcap_data ในนั้นก็จะมี field ต่างๆ เช่น project_num , record , field_name , value ซึ่ง
ไอ่ตัว field_name ก็จะเก็บค่า field ที่เราสร้างขึ้นมาจากระบบของมัน เช่น question_1 ,question_2 ,question_3 ... เป็นต้น
แล้วก็มี field value เพื่อเก็บค่า กำกับ field นั้นๆด้วย เช่น field_name = question_1 , value = 1 ( คือ question_1 = 1 )
ซึ่งเวลาเรียกใช้ ก็ต้องเรียก field_name ทั้งหมดมาก่อนเพื่อที่จะ ดึงค่า value ของ field นั้นๆ เช่น
Code (PHP)
$sql = "SELECT DISTINCT field_name FROM redcap_data WHERE project_id = '$pjid'"; // เรียก field_name ที่ไม่ซ้ำกัน
จากนั้นก็ดึงค่า value ต่างๆ ในแต่ละ field_name ( ซึ่งมีมากกว่า 1 ค่า )
Code (PHP)
$query = mysql_query($sql) or die(mysql_error());
while ($r = mysql_fetch_array($query)) {
$field_name = $r['field_name']; //กำหนดตัวแปรของ field_name
$query_value = mysql_query("SELECT value FROM redcap_data WHERE field_name = '$field_name' AND record IN ($val)") or die(mysql_error()); //ดึงค่า value จาก field_name ต่างๆ ปล.$val คือค่า record ที่ดึงมาแล้ว เช่น 1,2,6,7,9,10 เป็นต้น
$count = mysql_num_rows($query_value);
$i = 0;
while ($rv = mysql_fetch_array($query_value)) {
$array_field[$field_name][$i] = $rv['value']; //เก็บลงใน array เพื่อเรียกใช้ เช่น $array_field[question_1][0] = 1 , $array_field[question_2][1] = 2 ... เป็นต้น
$i++;
}
}
ก็เรียกใช้งานได้ปกติ แต่มันเกิดปัญหาตรงที่ว่า เมื่อค่าของ record มันเป็น 1,1-1,2,2-1,2-1,3,4,5, ... เนี่ย มันแสดงผลผิดพลาดครับเพราะคำสั่ง IN มัน เอาส่วนที่เกี่ยวข้องกับ 1 หรือ 2 มาหมดเลย ทั้งๆที่บางครั้งไม่ได้ select ตัวของ 1-1 หรือ 2-1,2-2 ออกมา จะให้เลขของ record เรียงก็ไม่ได้ ( เป็น requirement )
ซึ่งอยากจะถามว่า พอจะมี วิธีแก้ปัญหาเกี่ยวกับคำสั่ง IN หรือการ Query อื่นๆบ้างมั้ยครับ ขอบคุณครับ
Tag : PHP
|
|
|
|
|
|
Date :
2014-12-08 11:30:46 |
By :
gun31937 |
View :
840 |
Reply :
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
$query = mysql_query($sql) or die(mysql_error());
while ($r = mysql_fetch_array($query)) {
$field_name = $r['field_name']; //กำหนดตัวแปรของ field_name
$query_value = mysql_query("SELECT value FROM redcap_data WHERE field_name = '$field_name'
AND record IN ('$val')") or die(mysql_error()); //ดึงค่า value จาก field_name ต่างๆ ปล.$val คือค่า record ที่ดึงมาแล้ว เช่น 1,2,6,7,9,10 เป็นต้น
$count = mysql_num_rows($query_value);
$i = 0;
while ($rv = mysql_fetch_array($query_value)) {
$array_field[$field_name][$i] = $rv['value']; //เก็บลงใน array เพื่อเรียกใช้ เช่น $array_field[question_1][0] = 1 , $array_field[question_2][1] = 2 ... เป็นต้น
$i++;
}
}
หรือป่าว
|
|
|
|
|
Date :
2014-12-08 15:42:17 |
By :
compiak |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|