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

HOME > PHP > PHP Forum > ถามเรื่อง mysql select ครับ ช่วยด้วยครับ คือผมต้องการ select ข้อมูลจากตาราง B ตามที่ select ได้จากตาราง A โดยไม่ใช้การ join



 

ถามเรื่อง mysql select ครับ ช่วยด้วยครับ คือผมต้องการ select ข้อมูลจากตาราง B ตามที่ select ได้จากตาราง A โดยไม่ใช้การ join

 



Topic : 045554



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



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



คือผมต้องการ select ข้อมูลจากตาราง B ตามที่ select ได้จากตาราง A โดยไม่ใช้การ join
พอเขียนแบบนี้มันได้แค่ record เดียวครับ

$qr=mysql_query("select Id from A where Name like '%".$key."%'");
$rs=mysql_fetch_array($qr);

$qy=mysql_query("select * from B where Id in('".$rs['Id']."')");

ไม่รู้จะแก้โค๊ดยังไง



Tag : - - - -







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-07-16 14:15:03 By : tinthai View : 1496 Reply : 17
 

 

No. 1



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



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


Code (PHP)
$qr=mysql_query("select Id from A where Name like '%".$key."%'");
$rs=mysql_fetch_array($qr);
$id = $rs['Id'];

$qy=mysql_query("select * from B where Id in('".$id."')");


ถ้าผลไม่ได้ ก็คงผิดที่ $qy หล่ะครับ






Date : 2010-07-16 14:16:33 By : 50121680
 


 

No. 2



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



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

ไม่ได้ครับยังคงได้ record เดียวอยู่
Date : 2010-07-16 14:21:21 By : tinthai
 

 

No. 3



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



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

ใครก็ได้ช่วยด้วยครับ
Date : 2010-07-16 15:12:33 By : tinthai
 


 

No. 4



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

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

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

ทำไมต้องใช้ in ด้วยครับมี Id มากกว่าหนึ่งเปล่าครับ


กรณี Id ของ A ออกมาแค่หนึ่งตัว
Code (PHP)
$qr=mysql_query("select Id from A where Name like '%$key%'");

if(mysql_num_rows($qr)>0){
  $rs=mysql_fetch_array($qr);
  $qy=mysql_query("select * from B where Id = '$rs[id]' ");
}


กรณี Id ของ A ออกมาหลายตัว
Code (PHP)
$qr=mysql_query("select Id from A where Name like '%$key%'");

if(mysql_num_rows($qr)>0){
  $val="0";
  while($rs=mysql_fetch_array($qr)){ 
    $val.=",'$rs[Id]' "
  }
  $qy=mysql_query("select * from B where Id  in ($val) ");
}

Date : 2010-07-16 15:20:49 By : xbeginner01
 


 

No. 5



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



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

ได้แล้วครับ
Code (PHP)
$qr=mysql_query("select Id from A where Name like '%".$key."%'");
while($rs=mysql_fetch_array($qr))
$id.=",'"$rs['Id']."'"; // ทำให้ข้อมูลให้อยู่ในรูปแบบ ,'1','2','3',4'....
$id=substr($id,1); // ตัด , ตัวแรกออก
$qy=mysql_query("select * from B where Id in(".$id.")");

ใครเจอปัญหาแบบผมเอาไปใช้เลยครับ และขอบคุณคุณ xbeginner01 และ Gusto ที่ช่วยตอบครับ
Date : 2010-07-16 15:21:38 By : tinthai
 


 

No. 6



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



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


แล้วทำไมใช้ join ไม่ได้ละคะ

Join ผิดอะไรหรอ
Date : 2010-07-16 15:23:47 By : blurEyes
 


 

No. 7



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



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

ใช้ join แล้วเวลามีคนเข้าดูข้อมูลเยอะๆ server จะทำงานหนักครับ
ดูได้จากที่นี่ครับ
http://www.myblog.in.th/2008/05/15/mysql-join-table-effect/
Date : 2010-07-16 15:26:05 By : tinthai
 


 

No. 8



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

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

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

บทความน่าสนใจมากครับ

ถูกล้างสมองให้ใช้ join เหมือนกันครับ แต่ขอโต้แย้งข้อนี้หน่อย

- ใครว่า join เขียนง่ายครับ เขียนยากออก ยิ่ง join กันหลายตารางอีก แล้ว join แบบไม่มีข้อมูลอีก


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

ใครมีประสบการณ์ก็บอกหน่อยละกันครับจะได้เก็บข้อมูล
Date : 2010-07-16 16:18:07 By : xbeginner01
 


 

No. 9



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



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


ตั้งแต่เกิดมา เคยเรียนการใช้ JOIN แต่ไม่เคยนำ JOIN ไปใช้เลยแม้แต่นิดเดียว
Date : 2010-07-16 16:25:34 By : 50121680
 


 

No. 10



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



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

ผมว่าถ้ามันซับซ้อนมากๆก็คงต้องใช้แหละครับ แต่ของผมมันไม่ซับซ้อนขนาดต้องใช้อ่ะครับ
Date : 2010-07-16 16:45:20 By : tinthai
 


 

No. 11



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

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

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

ใช้ join แล้วเวลามีคนเข้าดูข้อมูลเยอะๆ server จะทำงานหนักครับ
ดูได้จากที่นี่ครับ
http://www.myblog.in.th/2008/05/15/mysql-join-table-effect/


ผมต้องขอแย้งกับบทความนี้นะครับ เพราะเท่าที่ผมเจอมาคิดว่าการ join อาจจะทำให้ cpu ทำงานหนักขึ้นก็จริงอยู่ แต่ก็ขึ้นกับการออกแบบ database ด้วยผมเคยทำงานอยู่เว็บแห่งหนึ่ง UIP ประมาณ 3 หมื่น ใช้ join ระบบล่มทันที่ แต่ว่า database ที่เค้าออกแบบมาก่อนที่ผมจะเข้าไปทำงานนั้น เค้าใช้ field ที่เป็น vachar ในการ compare ตอน join ครับ ซึ่งจุดนี้ก็น่าจะเป็นปัญหาที่หนักอยู่เหมือนกันกับการ jion แล้วผมทำเว็บอีกตัวนึง UIP ก็ หมื่นๆ กว่าๆ ผมก็ใช้ join ไม่เป็นมีปัญหาอะไรเลยครับ การ join ก็มีหลายรูปแบบ อีกเหมือนกัน บางคนก็แค่ compare ธรรมดาเช่น

SELECT a.aa, b.aa, b.bb FROM a, b WHERE a.aa=b.aa


กับ

SELECT a.aa, b.aa, b.bb FROM a LEFT JOIN b ON a.aa=b.aa


ก็ได้ผลต่างกันแล้วนะครับ ไม่เชื่อลองหาวิธีทดสอบดูคครับ แต่ต้อง insert ข้อมูลเยอะๆ หน่อย นะครับ สัก แสนสองแสน record แล้วจะเห็นผล


แล้วอีกอย่างผมใช้ smf เข้าไปดูโค้ด ข้างในเค้ายังใช้ join เลยครับ

ตัวอย่างโค้ดการ join จาก smf
// Find all boards and categories, as well as related information.  This will be sorted by the natural order of boards and categories, which we control.
	$result_boards = $smcFunc['db_query']('boardindex_fetch_boards', '
		SELECT' . ($boardIndexOptions['include_categories'] ? '
			c.id_cat, c.name AS cat_name,' : '') . '
			b.id_board, b.name AS board_name, b.description,
			CASE WHEN b.redirect != {string:blank_string} THEN 1 ELSE 0 END AS is_redirect,
			b.num_posts, b.num_topics, b.unapproved_posts, b.unapproved_topics, b.id_parent,
			IFNULL(m.poster_time, 0) AS poster_time, IFNULL(mem.member_name, m.poster_name) AS poster_name,
			m.subject, m.id_topic, IFNULL(mem.real_name, m.poster_name) AS real_name,
			' . ($user_info['is_guest'] ? ' 1 AS is_read, 0 AS new_from,' : '
			(IFNULL(lb.id_msg, 0) >= b.id_msg_updated) AS is_read, IFNULL(lb.id_msg, -1) + 1 AS new_from,' . ($boardIndexOptions['include_categories'] ? '
			c.can_collapse, IFNULL(cc.id_member, 0) AS is_collapsed,' : '')) . '
			IFNULL(mem.id_member, 0) AS id_member, m.id_msg,
			IFNULL(mods_mem.id_member, 0) AS id_moderator, mods_mem.real_name AS mod_real_name
		FROM {db_prefix}boards AS b' . ($boardIndexOptions['include_categories'] ? '
			LEFT JOIN {db_prefix}categories AS c ON (c.id_cat = b.id_cat)' : '') . '
			LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = b.id_last_msg)
			LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)' . ($user_info['is_guest'] ? '' : '
			LEFT JOIN {db_prefix}log_boards AS lb ON (lb.id_board = b.id_board AND lb.id_member = {int:current_member})' . ($boardIndexOptions['include_categories'] ? '
			LEFT JOIN {db_prefix}collapsed_categories AS cc ON (cc.id_cat = c.id_cat AND cc.id_member = {int:current_member})' : '')) . '
			LEFT JOIN {db_prefix}moderators AS mods ON (mods.id_board = b.id_board)
			LEFT JOIN {db_prefix}members AS mods_mem ON (mods_mem.id_member = mods.id_member)
		WHERE {query_see_board}' . (empty($boardIndexOptions['countChildPosts']) ? (empty($boardIndexOptions['base_level']) ? '' : '
			AND b.child_level >= {int:child_level}') : '
			AND b.child_level BETWEEN ' . $boardIndexOptions['base_level'] . ' AND ' . ($boardIndexOptions['base_level'] + 1)),
		array(
			'current_member' => $user_info['id'],
			'child_level' => $boardIndexOptions['base_level'],
			'blank_string' => '',
		)
	);


ปล. ผมคิดว่าอยู่ทีการออกแบบ database มากกว่าที่จะเป็นเพราะคำสั่งข join คนที่คิดคำสั่งพวกนี้ logic เค้าขั้นเทพครับ ผมเชื่ออย่างนั้นนะ
Date : 2010-07-18 13:04:01 By : DownsTream
 


 

No. 12



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

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

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


ไม่รู้นะระหว่างการ Join กับการลูป อันไหนจะกินแรมเยอะกว่ากัน อันไหนจะเดี้ยงไวกว่ากัน แต่บางครั้งมันก็ไม่ได้ติดที่ join แต่ไปหนักที่ order มากกว่า แต่ก็ไม่ใช่ว่า join จะไม่ทำให้ช้าถ้า join ฟิลด์ที่ไม่ใช่ index ก็ช้าเหมือนกัน อันนี้ก็ประสบการณ์อันน้อยนิดของผมเหมือนกัน หรือว่าผมยังไม่เคยจับระบบใหญ่ยักษ์เหมือนชาวบ้านเค้าน้อ
Date : 2010-07-18 13:26:56 By : PlaKriM
 


 

No. 13



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



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


ก้อไปจับมั่งดิคะพี่ปาการิม
Date : 2010-07-18 16:27:56 By : blurEyes
 


 

No. 14



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

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

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


Code
ก้อไปจับมั่งดิคะพี่ปาการิม


จะไปหาที่ไหนละเนี้ย
Date : 2010-07-19 00:41:28 By : PlaKriM
 


 

No. 15

Guest


เคยลองเปลี่ยนการ join ตารางสองตารางประมาณสองหมื่น record มาเป็นการเก็บ array มาใส่ใน query ถัดไป มาเปรียบเทียบกัน แบบใส่ array วนลูปเอาเองจะทำเวลาดีขึ้นประมาณ 5-10%
แต่เคยได้ทราบมาการ join หรือแยกเป็นสอง query ไม่ได้มีแบบไหนดีกว่ากันในทุกกรณี
Date : 2010-07-19 03:35:07 By : :)
 


 

No. 16



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



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


ไม่จริงอะค่ะ ที่ว่า join แล้วช้า
ทีวิธี optimized ร้อยแปดพันวิธีเริ่มตั้งแต่คุณออกแบบ
normalized ระบบ จัดทำ index ให้เพียงพอ
แล้วก่อนจะเอามา join กัน คุณตัดเงื่อนไขก่อนไม่ใช่เอา ข้อมูล 20000 record
ไป join กันแล้วค่อยตัดเงื่อนไขอีกที ถ้าจะเอาปรสบการณ์กับตัวเลขตรงนั้นมา benchmark
คงไม่ค่อยแฟร์เท่าไหร่มั้งคะ แล้วอีกอย่างใน database engine มีสารพัด cache มาช่วย
ไม่ใช่เอา join มาวางข้างนอกแล้วยิงเข้าทื่อๆ อย่างเดียว

ยิ่งคุณไปใช้ IN น่าจะไปกันใหญ่มากกว่าเพราะทุก record จะเข้าเงื่อนไข n ตัวจาก select ตัวหลัง

แหม

Quote:
อาจารย์ส่วนมากไม่ได้มาจับกับ Database ใหญ่ๆกันหรอก โดยมากก็สอนให้รู้ถึงทฤษฏี และ บอกข้อดีก็เท่านั้น ซึ่งคนที่เรียนๆมาก็คงได้ยินอาจารย์พูดว่า

“การ JOIN ทำให้เราเขียนโค๊ดคิวรี่ข้อมูลได้สั้นขึ้น ไวขึ้น ง่ายขึ้น”

ก็ถูกอย่างที่อาจารย์พูดนะ เขียนโค๊ดสั้นๆ ง่ายขึ้น จริงๆว่ะ


แหมดูถูก อาชีพอาจารย์จังนะคะ พราวโชคดีมั้งได้มาเรียนอาจารย์ดี ท่านใช้ database มาตั้งแต่ unix
จนมาถึง สารพัด informix db2 ถ้าเรียนด้วยตัวเองแล้วประสบความสำเร็จ ทำไมต้องอวดดีด้วยละคะ
Date : 2010-07-19 04:31:44 By : blurEyes
 


 

No. 17



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



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


แวะมาดูด้วยคน
Date : 2010-07-19 09:07:36 By : SOUL
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ถามเรื่อง mysql select ครับ ช่วยด้วยครับ คือผมต้องการ select ข้อมูลจากตาราง B ตามที่ select ได้จากตาราง A โดยไม่ใช้การ join
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่