 |
select 2 ตาราง ที่มีข้อมูล เหมือน กัน และไม่เหมือนกัน โดย group by name_a และ name_b ค่าที่ได้ |
|
 |
|
|
 |
 |
|
tb_A
name_a, status_a
ส้ม ,1
พริก ,1
แตงโม ,1
กล้วย ,1
มะขาม, 0
มะละกอ ,1
tb_ฺB
name_b, status_b
ส้ม, 1
กล้วย ,1
มะขาม ,0
มะละกอ ,1
ผลลัพธ์
ส้ม, 1
พริก,1
แตงโม , 1
กล้วย 1
มะละกอ 1
แบบนี้ ต้อง select แบบไหนครับ
เอา 2 ตารางมาเปรียบเทียบกัน แล้วเช็คว่า status_a และ status_b ไม่เท่ากับ 0
Tag : PHP, HTML/CSS, Action Script, Ajax, jQuery
|
|
 |
 |
 |
 |
Date :
2016-05-21 10:07:46 |
By :
rock_rock |
View :
7067 |
Reply :
21 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
รบกวนด้วยครับ
|
 |
 |
 |
 |
Date :
2016-05-23 15:31:34 |
By :
rock_rock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Capture โครงสร้างและ Result ที่อยากได้ มาดูครับ
|
 |
 |
 |
 |
Date :
2016-05-24 09:49:50 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ดึง name_a และ name_b มารวมกัน แล้ว groub by แล้วนำมาเก็บใน ตัวแปร NAME ครับ
|
 |
 |
 |
 |
Date :
2016-05-24 16:11:55 |
By :
rock_rock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
@PT_Rock เกือบถูกแระ อีกนิดเดียว
union แล้ว group by ต้อง group by name, status จากนั้นก็ having status != 0
ปล. ใช้ union, intersec ก็ได้
หรือ inner join, outer join ก็ได้
ได้หลายวิธี
|
 |
 |
 |
 |
Date :
2016-05-24 16:24:47 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
$sql="select name , status from tb_a group by name
UNION ALL
select name , status from tb_b group by name ";
ลองแบบนี้แล้ว group by ไม่ได้ ครับ
|
 |
 |
 |
 |
Date :
2016-05-24 18:24:39 |
By :
rock_rock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
select table1.* from table1 inner join table2
on table1.name=table2.name and table1.status = table2.status
where table1.status=1
group by table1.name
|
 |
 |
 |
 |
Date :
2016-05-24 21:23:35 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
@PT_Rock
Code (SQL)
select c.name, c.status from (a union b) as c group by c.name, c.status having c.status != 0;
|
 |
 |
 |
 |
Date :
2016-05-25 08:38:00 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
@PT_Rock แก้ให้ถูกสิจ๊ะ
ปล. เราแค่ไกด์ ไม่ได้เขียนเต็ม เครื่องหมาย != เราตั้งใจ
|
 |
 |
 |
 |
Date :
2016-05-25 13:02:08 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 10 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2016-05-25 13:02:08
รายละเอียดของการตอบ ::
ขอบคุณสำหรับแนวทางครับ
select c.name , c.status
from (select name_a, status_a, from a
UNION
select name_b ,status_b from b) as c
group by c.name , c.status having c.status != 0
จะเรียงตาม c.name ยังไงครับ
select c.name , c.status
from (select name_a, status_a, from a
UNION
select name_b ,status_b from b) as c
group by c.name ASC, c.status having c.status != 0
group by c.name ASC, c.status having c.status != 0
|
 |
 |
 |
 |
Date :
2016-05-25 15:48:27 |
By :
rock_rock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
...
group by c.name, s.status having...
order by c.name desc
|
 |
 |
 |
 |
Date :
2016-05-25 16:12:41 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
select distinct * from (
select a.* from a where status>0 and not exists( select name from b where name=a.name and status>0)
union all
select b.* from b where status>0 and not exists( select name from a where name=b.name and status>0)
) as tmp
|
 |
 |
 |
 |
Date :
2016-05-25 18:47:09 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 7 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2016-05-25 08:38:00
รายละเอียดของการตอบ ::
select c.name, c.status from (a union b) as c group by c.name, c.status having c.status != 0;
ถ้าเราเพิ่ม อีกตาราง คือ ตาราง e
โดยมี
ืname เหมือนกัน กับ ตาราง a , b แค่ฟิว เดียว
แต่มีเพิ่ม company เข้าไป เพราะอยากให้ order by company (รูปแบบเป็น text)
โดย ให้ เรียง จากน้อยไปมาก
group by c.name และ order by c.company
select c.name, c.status c.company from (a union b union e) as c group by c.name, c.status having c.status != 0
order by c.company ASC
เช่น
tb_a
name_a,status_a
1
2
3
ta_b
name_b , status_b
4
2
5
ผลลัพธ์ ที่อยากได้ คือ
1
2
3
4
5
ta_e
ืname_e , company
1,จ
2,ค
3,ข
4,ก
5,ง
ผลลัพธ์ ออกมาเป็น ให้เรียง จาก company
ืname_e, company
4 , ก
3 , ข
2 , ค
5 , ง
1 , จ.
รบกวนอีกนิดครับ
|
 |
 |
 |
 |
Date :
2016-05-26 11:07:50 |
By :
rock_rock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อัญเชิญคนละระดับต้องรอ 5 เทิร์นนะ
ยกเว้นมีการ์ดเวทมนต์ ลดระยะเวลาร่าย
|
 |
 |
 |
 |
Date :
2016-05-26 11:45:48 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จริงๆ คืออยากให้ลแงคิดลองทำน่ะ

|
 |
 |
 |
 |
Date :
2016-05-26 11:53:30 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 17 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2016-05-26 11:53:30
รายละเอียดของการตอบ ::
รูปแบบมันนาใช้ right join แต่ก็ไม่ได้อยู่ดีครับ
select c.name , c.status
from (select name_a, status_a, from a
UNION
select name_b ,status_b from b) as c
RIGHT JOIN
select name_e, company from e
ON name_e=c.name
group by c.name , c.status having c.status != 0
หรือ อีกแบบ ลอง
select c.name , c.status
from (select name_a, status_a, from a
UNION
select name_b ,status_b from b) as c
group by c.name , c.status having c.status != 0
query=mysql_query()
while(arr=mysql_fetch_array(){
$arr[name]
select * from e
where name_e=$arr[name]
ก็ไม่ได้ครับ
}
|
 |
 |
 |
 |
Date :
2016-05-26 14:46:49 |
By :
rock_rock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 17 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2016-05-26 11:53:30
รายละเอียดของการตอบ ::
ได้แล้ว ครับ ขอบคุณมากมาย
ดึงค่าที่ได้มาครั้งแรก จากการ union เก็บไว้ c
แล้วก็ inner join กับ ta_e ที่เราเพิ่มเข้าไป โดย id เหมือนกัน แล้ว ดึงค่าตาราง e ออกมาแล้ว ก็ มา order by ตาราง e
////select * from table_1 tb1 inner join table_2 tb2 on tb1.tb_11= tb2.tb_21 inner join table_3 tb3 on tb1.tb_13 = tb3.tb_33
select c.name , c.status, e.name_e , e.company
from (select name_a, status_a, from a
UNION
select name_b ,status_b from b) as c
INNER JOIN company as e
ON c.name_a=e.name_e
group by c.name , c.status having c.status != 0
order by e.company ASC
ขอบคุณทุกท่านที่ช่วยตอบคำถาม คนไม่เก่งครับ
|
 |
 |
 |
 |
Date :
2016-05-27 11:41:07 |
By :
rock_rock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าเป็นผมนะเอาแบบดิบๆมั่วๆตามสไตล์
1. คิวรี่ธรรมดา SELECT * FROM tb_A WHERE status_a =1 แล้วเก็บผลลัพธ์ใส่อาเรย์
2. คิวรี่ธรรมดา SELECT * FROM tb_B WHERE status_b =1 แล้วเก็บผลลัพธ์ใส่อาเรย์
เอาอาเรย์สองตัวมารวมกัน แล้วใช้ array_unique ตัดค่าซ้ำในอาเรย์
เอามาแสดงผล จบ ... แปปเดียวเสร็จง่ายดาย ไม่ต้องจอยมันวุ่นวาย 555 
|
ประวัติการแก้ไข 2016-05-28 01:46:08
 |
 |
 |
 |
Date :
2016-05-28 01:45:15 |
By :
meannerss |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|