อยากทราบโค้ดเรียงตัวเลข ก่อนตัวอักษรค่ะ

เริ่มโดย utchara, 29 มีนาคม 2013, 10:21:40

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

utchara

อยากทราบโค้ด เรียงตัวเลขก่อน แล้วค่อยเรียงตัวอักษรต่อ
โดยที่ ตัวเลข กับ ตัวอักษรอยู่คอลัมเดียวกันอ่ะค่ะ อยากให้เอาตัวเลขมาเรียงก่อน

:wanwan012: :wanwan012:
ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

utchara

ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

Uball

code อะไรเหรอครับ ขอรายละเอียดอีกนิด ถ้ามีตัวอย่างมาด้วยจะดีมากเลยครับ  :P

utchara

อ้างถึงจาก: Uball ใน 29 มีนาคม 2013, 14:54:34
code อะไรเหรอครับ ขอรายละเอียดอีกนิด ถ้ามีตัวอย่างมาด้วยจะดีมากเลยครับ  :P

PHP ค่ะ

ตัวอย่าง กก 3, ขข 1, ขค 1, ฆฆ 5, กก 5

แสดงผลแบบเรียงตัวเลขจากน้อยไปหามากก่อนอ่ะค่ะ แล้วถ้าตัวเลขเหมือนกันให้เชคตัวอักษรแล้วเรีบงอักษรค่ะ
แสดงออกมาเป็นแบบนี้
ขข 1
ขค 1
กก 3
กก 5
ฆฆ 5

:wanwan009:
ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

Uball

โทษทีครับ ลืมไปเลย  :P

ลองใช้ usort() ดูนะครับ เราสามารถเขียน function ของเราเองในการเปรียบเทียบได้ โดยเอาตัวเลขสุดท้ายเป็นตัวเทียบ ถ้าเหมือนกันก็ดูตัวถัดไปเรื่อยๆ ดูตัวอย่างที่นี่ครับ

http://stackoverflow.com/questions/9900283/sort-an-array-by-the-last-couple-characters-of-its-values

:wanwan017:

utchara

ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

utchara


ได้แล้วค่ะ
order by <field>*1 asc


ขอบคุณ คุณ Queue ค่ะ  :wanwan019: :wanwan019:
ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

utchara

อ้างถึงจาก: utchara ใน 04 เมษายน 2013, 15:37:34

ได้แล้วค่ะ
order by <field>*1 asc


ขอบคุณ คุณ Queue ค่ะ  :wanwan019: :wanwan019:

แต่วิธีนี้เรียงได้แค่เลขตัวเดียวค่ะ  :-X :-X :-X
ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

fender69

ได้ยังอ่าครับพอดีผ่านมาเห็นเลยลองเขียนให้ดูครับ

// ทำข้อมูลเป็น Array ก่อนครับ เก็บไว้
  $array[] = "กก 3";
      $array[] = "ขข 1";
      $array[] = "ขค 1";
      $array[] = "ฆฆ 5";
      $array[] = "กก 5";
      $array[] = "กข 1";
      $array[] = "กก 2";
 
 $new = array();
 // ตอนนี้เนื่องจากเราจะเรียงจากตัวเลขก่อนวิธีคือ เอาตัวเลขมาไว้ข้างหน้าก่อนครับ มันจะกลายเป็น 2 กก, 1 ขก อะไรก็ว่าไป
 foreach ($array as $in) {
       $d = explode(" ", $in); // แยกข้อความด้วย ช่องว่างครับ
   $new[] = $d[1] . " " . $d[0]; // ย้ายเลขไปอยู่ข้างหน้าครับ
 }
 asort($new); // มันจะเรียงตัวเลขแล้วตามด้วยตัวอักษรครับผม

// ขั้นตอนต่อไปมันจะเรียงถูกต้องแล้วแต่ format มันยังผิดอยู่ เพราะว่าตอนนี้ตัวเลขอยู่ข้างหน้า เราเลย ทำแบบเดิมอีกครั้งแต่ให้ตัวเลขไปอยู่ด้านหลัง
      $reverse = array();
      foreach ($new as $in) {

         $d = explode(" ", $in); // แบ่งตัวเลขและตัวหนังสือ
         $reverse[] = $d[1] . " " . $d[0]; // เอาตัวหนังสือกลับไปไว้ด้านหน้า
      }
      print_r($reverse); // แสดงผลลัพท์

ลองมั่วๆ  ดูนะครับอาจจะมีวิธีที่ดีกว่านี้ก็ได้ครับผม

utchara

อ้างถึงจาก: fender69 ใน 04 เมษายน 2013, 16:26:36
ได้ยังอ่าครับพอดีผ่านมาเห็นเลยลองเขียนให้ดูครับ

// ทำข้อมูลเป็น Array ก่อนครับ เก็บไว้
  $array[] = "กก 3";
      $array[] = "ขข 1";
      $array[] = "ขค 1";
      $array[] = "ฆฆ 5";
      $array[] = "กก 5";
      $array[] = "กข 1";
      $array[] = "กก 2";
 
 $new = array();
 // ตอนนี้เนื่องจากเราจะเรียงจากตัวเลขก่อนวิธีคือ เอาตัวเลขมาไว้ข้างหน้าก่อนครับ มันจะกลายเป็น 2 กก, 1 ขก อะไรก็ว่าไป
 foreach ($array as $in) {
       $d = explode(" ", $in); // แยกข้อความด้วย ช่องว่างครับ
   $new[] = $d[1] . " " . $d[0]; // ย้ายเลขไปอยู่ข้างหน้าครับ
 }
 asort($new); // มันจะเรียงตัวเลขแล้วตามด้วยตัวอักษรครับผม

// ขั้นตอนต่อไปมันจะเรียงถูกต้องแล้วแต่ format มันยังผิดอยู่ เพราะว่าตอนนี้ตัวเลขอยู่ข้างหน้า เราเลย ทำแบบเดิมอีกครั้งแต่ให้ตัวเลขไปอยู่ด้านหลัง
      $reverse = array();
      foreach ($new as $in) {

         $d = explode(" ", $in); // แบ่งตัวเลขและตัวหนังสือ
         $reverse[] = $d[1] . " " . $d[0]; // เอาตัวหนังสือกลับไปไว้ด้านหน้า
      }
      print_r($reverse); // แสดงผลลัพท์

ลองมั่วๆ  ดูนะครับอาจจะมีวิธีที่ดีกว่านี้ก็ได้ครับผม


ต้องดึงจากฐานข้อมูลมาอ่ะค่ะ ต้องทำยังไง
ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

fender69


utchara

อ้างถึงจาก: fender69 ใน 05 เมษายน 2013, 10:30:22
พอ Query จาก Database ก็ยัดใส่ Array เลยครับ

ขอตัวอย่างแบบคร่าวๆ ได้ไหมคะ ขอบคุณค่ะ  :P :P
ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

fender69

$sql = "select * from table";
$query = mysql_query($sql);
while($result = $query){
  // ตรรงนีก็เป็นการ loop แล้ว add ข้อมูลใส่ Array ครับผม
}

ขออภัยนะครับผมจำ php แบบเพียว ๆ ไม่ค่อยได้แล้วอะครับ ถ้า syntax ผิดขออภัยด้วยครับ
แหะ ๆ ปกติ จะทำเป็น Class เอาไว้ใส่ แค่ query string มันจะ return ออกมาเป็น obj ให้เอาไปใช้งานเลย -*-

utchara

$objQuery  = mysql_query($strSQL);
while($to_name=mysql_fetch_array($objQuery)){
               $show_name[]=$to_name['product_name']; // ชื่อ
     $new = array();
   foreach ($show_name as $in) {
                          $nn = explode(" ", $in); // แยกข้อความด้วย ช่องว่างครับ
                          $new[] = $nn[1] . " " . $nn[0]; // ย้ายเลขไปอยู่ข้างหน้าครับ
   }
    asort($new);
                     
   echo $new;
}

มันแสดงผลแบบนี้ค่ะ

ArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArray
ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

fender69

  $new = array();
   foreach ($show_name as $in) {
                          $nn = explode(" ", $in); // แยกข้อความด้วย ช่องว่างครับ
                          $new[] = $nn[1] . " " . $nn[0]; // ย้ายเลขไปอยู่ข้างหน้าครับ
   }
    asort($new);
                     
   echo $new;

เอาพวกนี้ออกนอกลูป while ครับ

utchara

$objQuery  = mysql_query($strSQL);
            while($to_name=mysql_fetch_array($objQuery)){
               $show_name[]=$to_name['product_license_name']; // ชื่อ
               
                  /*$new_n = array();
                  $nn = explode(" ", $show_name);
                  $new[] = $nn[1] . " " . $nn[0];
                  asort($new);
                  for($i=0;$i<count($nn);$i++)
                  {
                  echo "$new[$i]<br>";
                  }*/
                  
               }       
               $new = array();
                  foreach ($show_name as $in) {
                     $nn = explode(" ",$in); // แยกข้อความด้วย ช่องว่าง
                        $new[] = $nn[1] . " " . $nn[0]; // ย้ายเลขไปอยู่ข้างหน้า
                 }
                       sort($new);
                     //print_r($new);
                     
                     $reverse = array();
                       foreach ($new as $in) {
                  
                         $nn = explode(" ",$in); // แบ่งตัวเลขและตัวหนังสือ
                         $reverse[] = $nn[1] . " " . $nn[0]; // เอาตัวหนังสือกลับไปไว้ด้านหน้า
                       }
                      print_r($reverse); // แสดงผลลัพท์



แสดงผลแบบนี้ค่ะ
Array (
  • => 1กก [1] => 1กก [2] => 1กก [3] => กก [4] => กก [5] => กข [6] => กค [7] => กจ [8] => กต [9] => กท [10] => กท [11] => กท [12] => กน [13] => กพ [14] => กล [15] => กล [16] => กว [17] => กว [18] => กห [19] => กห [20] => ขก [21] => ขข [22] => ฆฆ [23] => ษษ

    :wanwan009: :wanwan009:
ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com

utchara

ได้แล้ว ใช้โค้ดนี้ได้ค่ะ

SELECT  product_confirm,product_exp,product_id,product_name,product_price,product_type,SubStr(product_name, InStr(product_name, ' ')+1) AS fname FROM product where product_confirm='1' and product_exp>'$datetime'

โค้ดนี้จะตัดข้อความก้อนแรกออก เอาข้อความก้อนหลังไว้ค่ะ   :wanwan003: :wanwan003:
ขายน้ำมันดีเซลราคาถูก, ขายน้ำมัน, บริการน้ำมันถึงที่, น้ำมันราคาถูก
http://www.xn--22c0ca5ad6gdc0snb.com