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 > อยากสอบถาม เทคนิกการ join ตารางครับ กรณีบางตาราง ไม่มีข้อมูล



 

อยากสอบถาม เทคนิกการ join ตารางครับ กรณีบางตาราง ไม่มีข้อมูล

 



Topic : 112728



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



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



สอบถามกรณี join table ครับ

คือปกติใช้ LEFT JOIN กัน 3 ตารางก็ไม่มีปัญหา สมมุติมี
1. จังหวัด
2. อำเภอ
3. ตำบล

รูปแบบ 1
select count(*) from provinces pv left join amphurs ap on ap.province_code = pv.code left join tambons tm on tm.amphur_code = ap.code ;


JOIN แบบ LEFT JOIN ปกติ บางอำเภอ ไม่มีตำบล ข้อมูลก็ขึ้นปกติครับ สมมุติได้ 50 record

แต่ถ้าเปลี่ยนมาใช้ รูปแบบการ JOIN แบบนี้

----------------------


รูปแบบ 2
select count(*) from provinces pv, amphurs ap, tambons tm where ap.province_code = pv.code and tm.amphur_code = ap.code

;

อำเภอไหน ไม่มีตำบล กลายเป็น ข้อมูลจะหายไปเลย ไม่ขึ้น

ได้มา 30 record

พอจะมี เทคนิกแบบไหน ให้รูปแบบ การ JOIN แบบ ที่ 2 แสดงข้อมูลเหมือน แบบที่ 1 บ้างไหมครับ

เพราะดูการทำงานแล้ว แบบที่ 2 ทำงานไวมาก



Tag : PHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-11-21 15:33:05 By : progamer2000 View : 1440 Reply : 12
 

 

No. 1



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

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

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

OR หรือ IN ครับ

Code (SQL)
select 
	count(*)
from 
	provinces pv, amphurs ap, tambons tm
where
	ap.province_code = pv.code and
	(tm.amphur_code = ap.code OR tm.amphur_code = '')


Code (SQL)
select 
	count(*)
from 
	provinces pv, amphurs ap, tambons tm
where
	ap.province_code = pv.code and
        tm.amphur_code IN ('', ap.code)







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 15:48:24 By : phpinfo()
 


 

No. 2



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

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

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

เอ รู้สึกว่าจะไม่ได้ครับ เอาใหม่ๆ ต้องถามก่อนว่าจะนับอะไรครับ จำนวนจังหวัดหรืออะไร
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 15:53:07 By : phpinfo()
 

 

No. 3



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



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

เอาจำนวน จังหวัดครับ อย่างกรณีแรก query ได้ 77 จังหวัดปกติ แม้บางจังหวัดไม่มีข้อมูล อำเภอหรือ ตำบล

แต่ รูปแบบที่ 2 นิ ออกมาไม่ครบ เคสไหน ไม่มีอำเภอหรือตำบล มา join นิ ไม่ออกเลย

อยากให้รูปแบบที่สอง มีข้อมูลเท่ากับ แบบ แรกครับ

สาเหตุเนื่องจาก เท่าที่ทดสอบ แบบสองจะคิวรี่ได้ไวกว่า กรณีข้อมุลหลายๆพัน record
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 16:53:05 By : progamer2000
 


 

No. 4



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

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

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

ทำไมไม่ query ตารางจังหวัดอย่างเดียวไปเลยล่ะครับ

Code (SQL)
select count(*) from provinces

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 16:56:31 By : phpinfo()
 


 

No. 5



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



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

จริงๆ ไม่ได้ count คับแต่ เอาข้อมูลมาแสดง อ่า - -"

ข้อมุลมันจริงมัน ไม่ใช่จังหวัดอะครับ เป็นสินค้า join กัน 5 ตาราง

ตารางที่ 5 เป็น tag ของสินค้า บางสินค้าที่ไม่มี tag มันไม่ขึ้นเลย

แบบกรณีใช้แบบ 1 ก็ ขึ้นปกติ แต่ query ช้าครับ ตอนนี้ข้อมุลน้อยก็ยังไม่มีอะไรมาก ถ้าสินค้ามีเยอะ ก็เกรงจะมีปัญหา

แบบกรณีใช้แบบ 2 สินค้าที่ไม่มี tag ไม่ขึ้น T_T


ประวัติการแก้ไข
2014-11-21 17:00:29
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 16:58:16 By : progamer2000
 


 

No. 6



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

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

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

เอาข้อมูลอะไรมาแสดงครับ ลองบอกมาว่าต้องการข้อมูลแบบไหนอะไรยังไงจะช่วยได้ง่ายกว่านะครับ ตัวอย่างเป็น count คนตอบก็ต้องคิดแบบนั้นสิครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 17:03:06 By : phpinfo()
 


 

No. 7



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

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

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

งั้นก็มันก็ผิดตั้งแต่คำถามแล้วล่ะครับ ถ้าคุณถามด้วยโครงสร้างข้อมูลจริงมันจะมองออกกว่านี้นะครับ ลองเอาโครงสร้างของทุกตารางมาดู แล้วบอกว่าต้องการแสดงแบบไหน คนตอบจะช่วยคิดช่วยตอบได้ตรงจุดครับ มันอาจจะไม่จบที่ JOIN ก็ได้ อาจจะมีเทคนิคอื่นอีก แต่ถ้าคำถามแบบนี้ ตัวอย่างแบบนี้ ก็คิดได้แค่นี้ล่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 17:06:10 By : phpinfo()
 


 

No. 8



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



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

table products

---------------------
code name
1 แก้ว
2 จาน
3 ชาม


----------------------------
table tag
code product_code tag
1 1 1
2 1 2
3 3 1



-------------------------
table tag_detail
code name
1 สินค้าใหม่
2 สินค้ามาแรง

------------------------------------
ต้องการข้อมูลสินค้าจาก product ทั้งหมด ที่แสดง ชื่อ tag เรียงต่อกัน

code name tag
1 แก้ว สินค้าใหม่,สินค้ามาแรง
2 จาน สินค้ามาแรง
3. ชาม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 17:09:26 By : progamer2000
 


 

No. 9



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



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


ต้องการแสดงรายการสินค้า เรียงตาม จังหวัดอำเภอ ใช่ไหมครับ

รายการหลักที่แสดง คือรายการสินค้าหรือเปล่าครับ

แยกส่วนการคิวรี่
คิวรี่ จังหวัดเก็บเป็น array เอาไว้ $provinces[$province_row['id'] ]=$province_row;
คิวรี่ อำเภอ เก็บเป็น array ไว้ $ampurs[$ampur_row['id']]=$ampur_row;
ตำบลก็เมหือนกัน

คิวรี่ รายการสินค้า
echo $provinces[ $stock_row['province_id']]
, $ampurs[$stock_row['aumpur_id']]
, $tumbol[$stock_row['tumbol_id']];

ถ้าเอาโครงสร้าง ตารางมาให้ดูก็จะดีนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 17:12:16 By : Chaidhanan
 


 

No. 10



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



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

Code (SQL)
-- phpMyAdmin SQL Dump
-- version 3.1.3.1
-- http://www.phpmyadmin.net
--
-- โฮสต์: localhost
-- เวลาในการสร้าง: 
-- รุ่นของเซิร์ฟเวอร์: 5.1.33
-- รุ่นของ PHP: 5.2.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- ฐานข้อมูล: `testquery`
--

-- --------------------------------------------------------

--
-- โครงสร้างตาราง `product`
--

CREATE TABLE IF NOT EXISTS `product` (
  `code` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- dump ตาราง `product`
--

INSERT INTO `product` (`code`, `name`) VALUES
(1, 'จาน'),
(2, 'ชาม'),
(3, 'ช้อน'),
(4, 'ส้อม');

-- --------------------------------------------------------

--
-- โครงสร้างตาราง `product_tag`
--

CREATE TABLE IF NOT EXISTS `product_tag` (
  `code` int(11) NOT NULL AUTO_INCREMENT,
  `product_code` int(11) DEFAULT NULL,
  `tag_code` int(11) DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- dump ตาราง `product_tag`
--

INSERT INTO `product_tag` (`code`, `product_code`, `tag_code`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 2, 3),
(4, 3, 2);

-- --------------------------------------------------------

--
-- โครงสร้างตาราง `tag`
--

CREATE TABLE IF NOT EXISTS `tag` (
  `code` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- dump ตาราง `tag`
--

INSERT INTO `tag` (`code`, `name`) VALUES
(1, 'สินค้ามาใหม่'),
(2, 'สินค้ามาแรง'),
(3, 'สินค้าพรีออเดอร์');




ใช้ข้อมูลจะส่งกลับเป็น json ครับผม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 17:18:42 By : progamer2000
 


 

No. 11



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



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

อันนี้คือ Query ที่ใช้อยู่ครับ

Code (SQL)
SELECT pd.code,pd.name,tp.tagname FROM product pd
LEFT JOIN (select product_code,GROUP_CONCAT(tag.name) as tagname from product_tag pt LEFT JOIN tag ON pt.tag_code = tag.code group by product_code) as tp ON tp.product_code = pd.code;




tag


ประวัติการแก้ไข
2014-11-21 17:26:01
2014-11-21 17:28:48
2014-11-21 17:29:25
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 17:24:43 By : progamer2000
 


 

No. 12



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



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


SELECT pd.code,pd.name,tp.tagname
FROM product pd
LEFT JOIN (
select product_code,GROUP_CONCAT(COALESCE( tag.name, '')) as tagname
from product_tag pt
LEFT JOIN tag ON pt.tag_code = tag.code
group by product_code
) as tp ON tp.product_code = pd.code;

เนื่องจากใช้ concat เจอค่า null ทำให้เป็น null ไปทั้งหมดครับ
ต้องตรวจสอบก่อน ตัวยคำสั่ง ตัวสีแดง


ประวัติการแก้ไข
2014-11-21 17:57:37
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-11-21 17:57:11 By : Chaidhanan
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : อยากสอบถาม เทคนิกการ 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 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 อัตราราคา คลิกที่นี่