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 > php mysql จะเอาค่าจากตัวแปรไปเปรียบเทียบกับค่าใน db ครับ



 

php mysql จะเอาค่าจากตัวแปรไปเปรียบเทียบกับค่าใน db ครับ

 



Topic : 095787



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



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




จะเอาค่า่ $rand_number ไปเปรียบเทียบกับค่าใน column rand ทุก row ยังไงครับ

ถ้ามีซ้ำอยู่แล้วให้ echo same old
ถ้าเป็นค่าที่ไม่ซ้ำให้ echo new data

Code (PHP)
<?PHP
if(isset($_POST["submit"]))
    {
     include("connect.php");

     $sql = "SELECT * FROM user order by id asc ";
     $result = mysql_query($sql);
     $datas=mysql_fetch_array($result);{
     $rand = stripslashes(str_replace('\r\n', '<br>',($datas['rand'])));
     }

     $rand_number = 1;
     $i = 0;
         while( $i == 0 )
           {
             if ( $rand_number = $rand )
               { 
                 $i = 1;                 
                 echo "same old";  
               }
             else
               {
                 $i = 1;
                 echo "new data"; 
               }
           }
    }
?>




Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-05-28 20:09:06 By : peap View : 3734 Reply : 14
 

 

No. 1



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

WHERE ไงครับ

Code (SQL)
SELECT COUNT(*) FROM `user` WHERE `rand` = '$rand_number'







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 20:47:36 By : cookiephp
 


 

No. 2



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



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


ตอบความคิดเห็นที่ : 1 เขียนโดย : cookiephp เมื่อวันที่ 2013-05-28 20:47:36
รายละเอียดของการตอบ ::
ยังงงๆ อยู่ครับท่าน ช่วยเอาใส่ให้ดูหน่อยครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 20:53:58 By : peap
 

 

No. 3



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

กำ - -

ใช้กับ mysql_query() อ่ะครับ

Code (PHP)
$count_result = mysql_query("SELECT COUNT(*) FROM `user` WHERE `rand` = '$rand_number'");
$count_row = mysql_fetch_row($count_result);
mysql_free_result($count_result);
if ($count_row[0]) {
    // มีอยู่แล้ว
} else {
    // ยังไม่มี
}

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 21:06:05 By : cookiephp
 


 

No. 4



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



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


อย่างนี้ถูกต้องมั้ยครับ ท่าน

ตอบความคิดเห็นที่ : 3 เขียนโดย : cookiephp เมื่อวันที่ 2013-05-28 21:06:05
รายละเอียดของการตอบ ::
Code (PHP)
<?PHP
if(isset($_POST["submit"]))
    {
     include("connect.php");

     $rand_number = 1;
     $i = 0;

$count_result = mysql_query("SELECT COUNT(*) FROM `user` WHERE `rand` = '$rand_number'");
$count_row = mysql_fetch_row($count_result);
mysql_free_result($count_result);

         while( $i == 0 )
           {
             if ( $count_row[0] )
               { 
                 $i = 1;                 
                 echo "same old";  
               }
             else
               {
                 $i = 1;
                 echo "new data"; 
               }
           }
    }
?>




ประวัติการแก้ไข
2013-05-28 21:21:51
2013-05-28 21:22:41
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 21:13:28 By : peap
 


 

No. 5



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

ครับ

ว่าแต่ ใช้ loop while เพื่ออะไรครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 21:24:59 By : cookiephp
 


 

No. 6



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



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


ตอบความคิดเห็นที่ : 5 เขียนโดย : cookiephp เมื่อวันที่ 2013-05-28 21:24:59
รายละเอียดของการตอบ ::
ครับ คือ $rand_number ที่ใช้งานจริงจะเป็น rand ( 1000 , 9999 );
คือ โค๊ดนี้จะอยู่ในหน้า register ครับ เมื่อมี user มาสมัครสมาชิก ระบบก็จะ random user id ให้กับ user นั้น โดยไม่ให้ซ้ำกับ user id ก่อนหน้านี้ ถ้า random ซ้ำกับ user id อื่่นก็ random ใหม่ไปเรื่อยๆครับ จนกว่าจะไม่ซ้ำ แล้วค่อย insert เข้า db ครับ ( ฟังก์ชันที่ท่านแมว ช่วยผมคือฟังก์ชันนี้ครับผม )

ถ้าถามว่าทำไมผมไม่เอา id primary auto increments ของ table มาเป็น user id เพราะว่าผมต้องการไม่ให้เกิดการเดาสุ่มเข้ามาถึง user id ของ user อื่นๆครับ



ประวัติการแก้ไข
2013-05-28 21:40:19
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 21:39:01 By : peap
 


 

No. 7



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

จะมีแค่ 1000 - 9999 เท่านั้นเหรอครับ
แสดงว่าสมาชิกมีได้สูงสุด 8999 คนนะครับ

ถ้าต้องการแค่นั้นจริงๆ ผมมีวิธีที่ดีกว่าเยอะเลยครับ
ให้สร้างตาราง user_ids ไว้อันนึงครับ

โดยมีข้อมูลแค่ฟิลด์เดียวคือ id ที่เป็นตัวเลขตั้งแต่ 1000 - 9999
แล้วเวลาที่สมัครสมาชิกใหม่ ก็ให้ดึง id จากตารางนั้นมาแบบสุ่ม

Code (SQL)
SELECT `id` FROM `user_ids` ORDER BY RAND()


หลังจากนั้นก็ลบ id ที่เลือกมาทิ้งไป

DELETE FROM `user_ids` WHERE `id` = '$id'

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 21:48:26 By : cookiephp
 


 

No. 8



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



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


ตอบความคิดเห็นที่ : 7 เขียนโดย : cookiephp เมื่อวันที่ 2013-05-28 21:48:26
รายละเอียดของการตอบ ::
คือไม่ต้องมาผ่านฟังก์ชัน rand ใช่มั้ยครับท่าน เลือกจาก db มาเลย เร็วกว่า



Code (PHP)
     $rand_number = rand(1,4);
     $i = 0;

$count_result = mysql_query("SELECT COUNT(*) FROM `user` WHERE `rand` = '$rand_number'");
$count_row = mysql_fetch_row($count_result);
mysql_free_result($count_result);

         while( $i == 0 )
           {
             if ( $count_row[0] )
               { $rand_number = rand(1,4); }
             else
               {
                 $i = 1;
                 $rand_number_insert = $rand_number; 
               }
           }


หน้าเว็บโหลดค้าง ไม่ไปไหนเลย ครับ ( ใน db ค่า rand มี 1 2 และ 3 อยู่แล้วครับ )




ประวัติการแก้ไข
2013-05-28 22:14:15
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 21:54:24 By : peap
 


 

No. 9



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

หรืออีกแบบครับ ใช้ id เป็นรูปแบบ UUID
คือ CHAR (36) ครับ
id จะมีรูปแบบประมาณนี้
f47ac10b-58cc-4372-a567-0e02b2c3d479

นี่คือฟังก์ชั่นที่ผมเขีัยนขึ้นมาเพื่อสร้าง UUID V4
<?php
function uuid()
{
	return sprintf(
		'%02x%02x%02x%02x-%02x%02x-4%x%02x-%x%x%02x-%02x%02x%02x%02x%02x%02x',
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 15),
		mt_rand(0, 255),
		mt_rand(8, 11),
		mt_rand(0, 15),
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 255),
		mt_rand(0, 255)
	);
}


จะเป็นการสุ่มแบบสุ่มจริงๆ ชาตินี้ก็จะไม่มีัวันซ้ำ (% ซ้ำมี แต่น้อยมากๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ)

Universally unique identifier
http://en.wikipedia.org/wiki/Uuid


ประวัติการแก้ไข
2013-05-28 22:32:01
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 22:14:24 By : cookiephp
 


 

No. 10



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



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


ตอบความคิดเห็นที่ : 9 เขียนโดย : cookiephp เมื่อวันที่ 2013-05-28 22:14:24
รายละเอียดของการตอบ ::
ผมอยากได้ที่แบบมีเฉพาะตัวเลขน่ะครับ ท่าน



ผมเขียนฟังก์ชันอย่างนี้ได้มั้ยครับท่าน
คือ ให้ฟังก์ชันดูเลขที่อยู่ในฐานข้อมูลทั้งหมดก่อนแล้ว ค่อยมาเข้าฟังก์ชัน random โดยห้าม random ออกมาตรงกับที่อยู่ใน db


ประวัติการแก้ไข
2013-05-28 22:22:05
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 22:18:38 By : peap
 


 

No. 11



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

แบบง่ายที่สุดคือ INSERT ไปเลย
โดยอยู่ในลูปที่ไม่รู้จบ แล้วทดสอบว่า INSERT ได้มั้ย ถ้ามันได้ แสดงว่าไม่ซ้ำ เพราะ id คือ PK มันจะซ้ำไม่ได้
ถ้าซ้ำก็จะ error และ mysql_query() ให้ผลเป็น false
แต่ถ้า INSERT ได้ ก็ให้ break ออกจากลูปซะ

สมมติว่าตาราง user มีแค่คอลัมน์เดียวคือ id
while (true) {
    if (mysql_query("INSERT INTO `user` (`id`) VALUES (1000 + ROUND(RAND() * 8999))")) {
        break;
    }
}


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

ผมถึงแนะนำให้สุ่มตัวเลขเก็บไว้ในตารางก่อน แล้วค่อยดึงออกมาใช้
หรือไม่ก็ทำช่วงให้กว้างกว่านี้
เช่น 1000000 - 9999999 (MEDIUMINT)
หรือ 100000000 - 999999999 (INT)
จะสุ่มได้เร็วกว่า และได้จำนวนที่เยอะกว่า
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 22:41:59 By : cookiephp
 


 

No. 12



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



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


ตอบความคิดเห็นที่ : 11 เขียนโดย : cookiephp เมื่อวันที่ 2013-05-28 22:41:59
รายละเอียดของการตอบ ::
ขอบคุณครับท่าน กระจ่างเลยครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 23:16:29 By : peap
 


 

No. 13



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



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

ขอถามหน่อยครับ ที่บอกว่า ไม่ให้เกิดการเดาสุ่มเข้ามาถึง user id ของ user อื่นๆ[/quote]

ช่วยขยายความอีกนิดนึงได้มั้ยครับ ว่าเคสนี้จะเกิดขึ้นอย่างไร และจะส่งผลอย่างไรกับระบบ ^^
เพราะไม่เคยมีระบบของตัวเอง เลยมองภาพไม่ออก ^^"
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 23:32:16 By : {Cyberman}
 


 

No. 14



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

วิธีแบบสร้างตารางของ id ไว้ก่อนล่วงหน้าสำหรับดึงออกมาใช้
โดยให้ช่วงห่าง 1000 - 99999
แต่ตอนดึงมาใช้ จะดึง 1000 - 9999 จนหมดก่อน แล้วค่อยดึง 10000 - 99999

สร้างตาราง user_ids
mysql_connect('localhost', 'your_username', 'your_password');
mysql_select_db('yourdb');
mysql_query("
CREATE TABLE IF NOT EXISTS `user_ids` (
  `id` mediumint(8) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
mysql_query("TRUNCATE TABLE `user_ids`");
mysql_query(
	sprintf("
		INSERT INTO `user_ids`
		VALUES %s
		",
		'(' . implode('),(', range(1000, 99999)) . ')'
	)
);


การดึงออกมาใช้
// เลือก id ที่ต่ำกว่า 1000 - 9999 ก่อน
// สังเกต ORDER BY RAND() คือการเลือกแบบสุ่ม
$id_result = mysql_query(
	"SELECT `id` FROM `user_ids` WHERE `id` < 10000 ORDER BY RAND() LIMIT 1"
);
// ถ้าไม่มี id 1000 - 9999 เหลือแล้ว
if (!($id_row = mysql_fetch_row($id_result))) {
	mysql_free_result($id_result);
	// เลือกอีกครั้ง
	$id_result = mysql_query(
		"SELECT `id` FROM `user_ids` WHERE `id` ORDER BY RAND() LIMIT 1"
	);
	$id_row = mysql_fetch_row($id_result);
}
mysql_free_result($id_result);
// ลบ id ที่เลือกมาทิ้ง
mysql_query("DELETE FROM `user_ids` WHERE `id` = $id_row[0]");
// ใช้ $id_row[0] เป็นค่าของ id ในการ INSERT ต่อไป
mysql_query("INSERT INTO `users` (`id`) VALUES ($id_row[0])");



ประวัติการแก้ไข
2013-05-28 23:44:15
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 23:43:02 By : cookiephp
 

   

ค้นหาข้อมูล


   
 

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