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,027

HOME > PHP > PHP Forum > ช่วยเรื่อง การ จับตัวเลข 4 หลักที่สะลับตำแหน่งกันหน่อยครับ



 

ช่วยเรื่อง การ จับตัวเลข 4 หลักที่สะลับตำแหน่งกันหน่อยครับ

 



Topic : 133441



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



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




การจับชุดตัวเลขที่เหมือนกัน 4 ต่ำแหน่ง
คือ ผมมีปัญหาเรื่องการจับ ผลลับของตัวเลข 4 ตำแหน่ง อยากจับชุดตัวเลข4ตัวที่มีเหมือนกัน ไม่ว่าจะอยู่ในตำแหน่งไหนก็ตามภายในชุดนั้น ให้เอาราคามารวมกันครับ
อันนี้ sql
db

อันนี้ผลการรัน อยากให้ ผลออกมา ตาม หมึกสีแดงๆที่เขียนไว้ครับ
sum


Code (PHP)
<? 
//รับค่ามาจาก หน่าอื่นเอาไว้ไปลบราคาออก
$chk1=$_POST[textfield];

$chk1=$chk1+0;


include "../connect.php"; 
$strSQL = "SELECT count_number, SUM(price_number) AS price_number FROM numbercount
where (price_number > 0) 
GROUP BY count_number HAVING SUM(price_number)  > $chk1 
ORDER BY price_number DESC";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>
<table width="350" border="1" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="3" align="center" valign="middle" bgcolor="#FFFFFF"><strong>รายการ 
        <input type="submit" name="Submit" value="พิมพ์" onclick="javascript:this.style.display='none';window.print()" />
    </strong></td>
  </tr>
  <tr>
    <td width="86" align="center" valign="middle" bgcolor="#CCFFFF">ลำดับ</td>
    <td width="96" align="center" valign="middle" bgcolor="#CCFFFF">เลข</td>
    <td width="160" align="center" valign="middle" bgcolor="#CCFFFF">ราคา</td>
  </tr>
   <?
while($objResult = mysql_fetch_array($objQuery))
{
?>
  <tr>
    <td align="center" valign="middle"><?php echo ++$i; ?></td>
    <td align="center" valign="middle"><?=$objResult["count_number"];?></td>
    <td align="right" valign="middle"><?=$objResult["price_number"];?>
    &nbsp;&nbsp;</td>
  </tr>
   <?
}
?>
</table>




Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-04-08 03:39:37 By : byeasy View : 6553 Reply : 8
 

 

No. 1



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



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


Code (SQL)
where count_number like '%1%' and count_number like '%2%' and .....







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-08 08:06:59 By : Chaidhanan
 


 

No. 2



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



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


ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2019-04-08 08:06:59
รายละเอียดของการตอบ ::
Code (PHP)
$strSQL = "SELECT count_number, SUM(price_number) AS price_number FROM numbercount
where count_number like '%1%' and count_number like '%2%' and count_number like '%3%' and count_number like '%4%'

GROUP BY count_number HAVING SUM(price_number)  > $chk1 
ORDER BY price_number DESC";


ใช้แบบนี้ มันเป็นการหาใช่ปะครับแบบใช้คนหา เราต้องมาฟิคค่าจาก code เลย ก็จะได้แค่ 1 2 3 4 ที่อยู่ในตำแหน่งใดๆภายใน4ตำแหน่งของ count_number ผลลับที่ได้มา ไม่ตรงครับ เพราะว่า บางทีอาจจะมี 5678 หรือ 4457 หรือ 9875 หรือว่ามีนัยยะอะไรที่นอกเหนือจากนี้หรือป่าวครับที่แนะนำผม หรือต้องแยกเลขใน count_number ออกเป็นตัวๆแล้วเอามาเทียบทีละตัว หรือแยก count_number ออกมาก่อนเป็นเป็นชุด จะได้ 24 ชุดตัวเลขจาก count_number เพียงชุดเดียวแล้วค่อยเอามาเทียบทีละชุด

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

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-08 12:08:12 By : byeasy
 

 

No. 3



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



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


https://www.w3schools.com/sql/sql_ref_mysql.asp
https://dev.mysql.com/doc/refman/8.0/en/functions.html

จากลิ้งค์อ้างอิงฟังก์ชั่นทั้งหลายของ mysql ดูๆแล้วไม่น่าจะมีคำสั่งที่ทำอย่างนี้ในกระบวนการ select มาแสดงธรรมดานะครับ
ดูแล้วน่าจะต้องผ่านการประมวลผลในขั้นตอนการ insert/update ก่อน

อาจต้องสร้างอีกตารางเป็นตารางสำหรับ index แล้วเก็บเลข 4 ชุดที่จะไม่ซ้ำกับชุดอื่นเลยแม้จะสลับกันก็ตาม อย่างเช่น 1324, 4321, 2314, 1234, 4123 unique number ก็คือ 1234 เรียงจากน้อยไปมาก
สมมุติผมกรอก 4213 ก็จับมาแยกอักขระเดี่ยวๆก่อนเลย แล้วเรียงน้อยไปมาก จะได้ 1234 แล้ว where ในตาราง index นี้ว่ามี unique number นี้ไหม (1234) ถ้าไม่มีก็เพิ่ม ถ้ามีก็ข้ามไป

แล้วในตารางของคุณก็เพิ่มอีก column หนึ่ง อ้างอิงไปยัง pk ของตาราง index นั้น.
จากตย.ข้างบน เมื่อผมกรอก 4213 ก็เอามาเรียงน้อยไปมากจะได้ 1234 ก็เอาไป where แล้ว insert ก่อนถ้าไม่มี แล้วเอา insert id มา ถ้า where แล้วมีก็เอา id มา
แล้วในตารางของคุณที่เพิ่มอีก column ก็ใส่ id ที่ได้มาจากของตาราง index นั้นไป

อ่านแล้วน่าจะงงๆหน่อย ค่อยๆทำความเข้าใจ เขียนออกมาเป็นโฟลวให้ตัวเองเข้าใจกระบวนการเองดูก่อน แล้วมันจะทำได้ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-08 15:52:11 By : mr.v
 


 

No. 4



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



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


ตอบความคิดเห็นที่ : 3 เขียนโดย : mr.v เมื่อวันที่ 2019-04-08 15:52:11
รายละเอียดของการตอบ ::
ขอบคุณมากๆครับ ผมก็พอจะนึกภาพออกแต่ก็เลือนๆ มันแบบว่าหลายขั้นตอนมาก เวลา query จะมีผลกับระบบไหม สุดท้ายข้อมูลใน ตารางมัน มหาสาร ราวๆ4000 ชุดตัวเลข ขอบคุณสำหรับคำแนะนำครับผม


อยากจะใช้ ฟังก์ชั่นของท่าน Chaidhanan ที่ผมเคยถามสมัยก่อนอยู่เหมือนกัน แต่ MYsql เครื่องที่ผมใช้อยู่มันเป็นรุ่น5.0 ไม่รองรับ ผมลองเอาไปใช้ กับ 5.1 ใช้ได้ครับ อันนี้ผมลองแก้ที่ ท่าน Chaidhanan เขียนไว้ให้เมื่อหลายปีก่อน ใช้ได้ ผลที่ออกมาตรงตามที่ต้องการเลย แต่ก็นะใช้กับเครื่องที่เป็น server ไม่ได้จะลบ sql แล้วลงใหม่ก็ไม่ไหว ข้อมูลมันใช้งานกับ data อื่นๆเพียบเลย
ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2019-04-08 08:06:59
รายละเอียดของการตอบ ::
DELIMITER $$
CREATE FUNCTION sort_num_3 (num char(4))
RETURNS char(4) DETERMINISTIC
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_num varchar(4) DEFAULT "";
DECLARE rs_num varchar(4) DEFAULT "";
DEClARE num_cursor CURSOR FOR
SELECT A FROM (
SELECT LEFT(num,1) A union all
SELECT SUBSTRING(num,2,1) union all
SELECT SUBSTRING(num,3,1) union all
SELECT RIGHT(num,1)
) T ORDER BY A;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
OPEN num_cursor;
get_num: LOOP
FETCH num_cursor INTO v_num;
IF v_finished = 1 THEN
LEAVE get_num;
END IF;
SET rs_num = CONCAT(rs_num, v_num );
END LOOP get_num;
CLOSE num_cursor;
RETURN rs_num;
END$$
DELIMITER ;


พอมองเห็นทางออก คือเขียนให้ php ช่วย แต่ก็ต้องแยกเลข 4 หลัก ต้องเขียนทั้งหมด 24 ชุด เหมือนขี้ช้าจับตั๊กแตน เลยอยากหาทางออก
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-08 16:25:40 By : byeasy
 


 

No. 5



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



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


จริงๆมันก็ไม่ได้หลายขั้นตอนขนาดนั้น แล้วเวลา query จะเร็วกว่าด้วย แค่ join 2 ตารางเป็นอย่างน้อย.

ขั้นตอน input
รับ input -> เอาตัวเลขมาแยกเป็นอักขระเดี่ยวๆ -> เรียงเลขใหม่น้อยไปมาก

เอาชุดเลขใหม่ไปหาใน db ตาราง index -> ไม่มีให้ insert แล้วเอา id มา, มีก็เอา id มาเฉยๆ

เพิ่มอีกคอลัมน์ในตารางเดิมที่ทำอยู่ เป็นอ้างอิงไปยังตาราง index.id

แค่นี้แหละ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-08 17:48:18 By : mr.v
 


 

No. 6



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



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


ใช้ php แยก ตัวอักษร ออกจากกันเท่านั้นครับ

Code (PHP)
$target = ?; // มาจากไหนก็เอาค่านั้นมาใส่
$where = ' where 1';
for($i=0; $i<4; $i++){
   $where .= ' and count_number like \'%'.$target[$i].'%\' '; 
}


แต่อันนี้มันไม่สามารถตรวจสอบ กรณีเลยซ้ำกันได้

แนะนำให้ใช้ regex
Code (PHP)
$where = " where count_number not REGEXP '[^$target]' ";


ปล.ตอนแรกว่าจะ บอกเรื่อง regex แต่คิดว่า น่าจะให้เข้าใจพื้นฐานก่อน เลยไม่ได้บอก
แต่ มานึกได้เมื่อกี้กว่า เลขซ้ำจะมีปัญหา และจะเขียนยาก จำเป็นต้องใช้ regexp ง่ายกว่า


ประวัติการแก้ไข
2019-04-08 17:58:38
2019-04-08 18:01:16
2019-04-08 18:02:22
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-08 17:54:42 By : Chaidhanan
 


 

No. 7



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



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


ตอบความคิดเห็นที่ : 6 เขียนโดย : Chaidhanan เมื่อวันที่ 2019-04-08 17:54:42
รายละเอียดของการตอบ ::
ขอบคุณมากๆครับผม

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-08 18:53:58 By : byeasy
 


 

No. 8



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



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


ตอบความคิดเห็นที่ : 5 เขียนโดย : mr.v เมื่อวันที่ 2019-04-08 17:48:18
รายละเอียดของการตอบ ::
ขอบคุณสำหรับแนวทางครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-08 19:27:57 By : byeasy
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ช่วยเรื่อง การ จับตัวเลข 4 หลักที่สะลับตำแหน่งกันหน่อยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 อัตราราคา คลิกที่นี่