ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming[mysql+php] จะเทียบข้อมูลระหว่างrowsในtableเดียวกันยังไงให้เร็วสุดๆ ช่วยด้วยครับ
หน้า: [1] 2   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [mysql+php] จะเทียบข้อมูลระหว่างrowsในtableเดียวกันยังไงให้เร็วสุดๆ ช่วยด้วยครับ  (อ่าน 6342 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
ManyMoney
คนรักเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 192



ดูรายละเอียด เว็บไซต์
« เมื่อ: 22 ธันวาคม 2008, 02:52:02 »

จาก table นี้นะครับ
domain      | update                 | keyword          | pr | check
---------------------------------------------------------------------------------------------------------------------------------
google.com   | 2008-10-11 13:01 | seo,search engine,google    | 1 | 3
google.com   | 2008-11-02 21:01 | search engine,google       | 1 | 4
live.com      | 2008-11-02 10:17 | live,microsoft,search      | 2 | 4
nipa.com      | 2008-11-01 08:23 | nipa,ads,thai       | 9 | 4
google.com   | 2008-11-02 21:01 | search engine,google       | 2 | 5
live.com      | 2008-11-02 10:17 | live,microsoft,search      | 2 | 5
thaiseoboard.com   | 2008-11-04 11:34 | ไทยเสียว,seo,หาเงิน      | 9 | 5

อยากเทียบระหว่าง check=4 กับ check=5 ว่าต่างกันตรงไหนบ้าง
แล้วแสดงผลเป็น
-----------------------------------------
google.com จาก pr 1 เป็น 2
nipa.com ถูกลบ
thaiseoboard.com ถูกเพิ่ม
-----------------------------------------
แค่เนี่ยอ่ะครับ คือถ้าข้อมูลน้อยๆผมก็จะใช้วิธี select เทียบทีละอันเลย  แต่ว่าข้อมูลมันมีเยอะระดับหลัก หลายๆพัน ควรทำยังไงครับที่จะเร็วที่สุดครับ?
ถ้าผมจจะ select * where check = 5 ก่อนแล้วได้เป็น array แล้วอยากจะเอาไปเทียบกับ where check=4 ยังไงให้ได้ผลลัพท์ที่ต้องการได้เร็วและประหยัดcpuสุดๆครับ?

รบกวนชี้แนะด้วยครับ ผมงมมาหลายวันแล้วครับ
บันทึกการเข้า

http://www.thaiseoboard.com/in...250.msg2456335.html#msg2456335 หานายทุนโรงไฟฟ้าพลังสะอาด

ขายที่ดินสวนผึ้ง พร้อมบ้าน7หลัง รวม12ไร่ ด้านหน้าติดถนน ด้านหลังติดเขา มีธารน้ำ วิวสวยที่สุดในสวนผึ้ง ขายรวม 12.7 ล้านบาท ภบท.5 สนใจpmขอดูรูปได้เลยครับ
alert
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 50
ออฟไลน์ ออฟไลน์

กระทู้: 1,741



ดูรายละเอียด
« ตอบ #1 เมื่อ: 22 ธันวาคม 2008, 04:46:54 »

คำสั่ง MINUS ครับ

SELECT member_id, name FROM a
MINUS
SELECT member_id, name FROM b

ตามนี้เลยครับ ลองประยุกต์ใช้ดูละกันครับ
บันทึกการเข้า

***** รับซื้อเว็บไซต์สายขาวคุณภาพ  ตั้งแต่ 500-30,000 uip มี traffic มาจาก Google  และไม่เคยโดนแบน adsense  เสนอราคามาทาง pm ได้เลยครับ *****
ManyMoney
คนรักเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 192



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 22 ธันวาคม 2008, 06:26:11 »

ปัญหาของผมคือมีแค่ table เดียวอ่ะ
MINUS ใช้กับการตรวจสอบ table เดียวกันได้เหรอครับ?  Lips Sealed
บันทึกการเข้า

http://www.thaiseoboard.com/in...250.msg2456335.html#msg2456335 หานายทุนโรงไฟฟ้าพลังสะอาด

ขายที่ดินสวนผึ้ง พร้อมบ้าน7หลัง รวม12ไร่ ด้านหน้าติดถนน ด้านหลังติดเขา มีธารน้ำ วิวสวยที่สุดในสวนผึ้ง ขายรวม 12.7 ล้านบาท ภบท.5 สนใจpmขอดูรูปได้เลยครับ
ManyMoney
คนรักเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 192



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 22 ธันวาคม 2008, 21:12:55 »

ดันครับ
บันทึกการเข้า

http://www.thaiseoboard.com/in...250.msg2456335.html#msg2456335 หานายทุนโรงไฟฟ้าพลังสะอาด

ขายที่ดินสวนผึ้ง พร้อมบ้าน7หลัง รวม12ไร่ ด้านหน้าติดถนน ด้านหลังติดเขา มีธารน้ำ วิวสวยที่สุดในสวนผึ้ง ขายรวม 12.7 ล้านบาท ภบท.5 สนใจpmขอดูรูปได้เลยครับ
Tee++;
โปรแกรมเมอร์ จอหงวน
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 79
ออฟไลน์ ออฟไลน์

กระทู้: 1,861



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 23 ธันวาคม 2008, 00:58:56 »

SELECT a.domain, (a.pr - b.pr) AS result FROM table a INNER JOIN table b USING(domain) WHERE a.check=3 AND b.check=4 GROUP BY a.domain

*** เขียนมันสดๆ ยังไม่ได้ test
บันทึกการเข้า

alert
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 50
ออฟไลน์ ออฟไลน์

กระทู้: 1,741



ดูรายละเอียด
« ตอบ #5 เมื่อ: 23 ธันวาคม 2008, 01:45:58 »

select domain , update ,keyword,pr from table where check=4
minus
select domain , update ,keyword,pr from table where check=5

มันก็กลายเป็นหลาย table แล้วหล่ะ ผมไม่รู้ชื่อ table นะ ไปเปลี่ยนเอาเองนะครับ  Smiley
บันทึกการเข้า

***** รับซื้อเว็บไซต์สายขาวคุณภาพ  ตั้งแต่ 500-30,000 uip มี traffic มาจาก Google  และไม่เคยโดนแบน adsense  เสนอราคามาทาง pm ได้เลยครับ *****
ManyMoney
คนรักเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 192



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 23 ธันวาคม 2008, 02:01:39 »

แล้วจะทำยังไงให้มันแสดงผล ได้เป็น
--------------------------
google.com จาก pr 1 เป็น 2
nipa.com ถูกลบ
thaiseoboard.com ถูกเพิ่ม
--------------------------
ได้บ้างครับ?
บันทึกการเข้า

http://www.thaiseoboard.com/in...250.msg2456335.html#msg2456335 หานายทุนโรงไฟฟ้าพลังสะอาด

ขายที่ดินสวนผึ้ง พร้อมบ้าน7หลัง รวม12ไร่ ด้านหน้าติดถนน ด้านหลังติดเขา มีธารน้ำ วิวสวยที่สุดในสวนผึ้ง ขายรวม 12.7 ล้านบาท ภบท.5 สนใจpmขอดูรูปได้เลยครับ
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 23 ธันวาคม 2008, 02:16:58 »

select domain , update ,keyword,pr from table where check=4
minus
select domain , update ,keyword,pr from table where check=5

มันก็กลายเป็นหลาย table แล้วหล่ะ ผมไม่รู้ชื่อ table นะ ไปเปลี่ยนเอาเองนะครับ  Smiley

เล่น oracle เหรอครับ

คือ minus ใน mysql มันไม่มีอะ
อยากใช้ ต้องเล่น left join แทน

SELECT a.domain, a.update, a.keyword, a.pr
FROM table a
LEFT JOIN table b ON a.check = 5 AND b.check = 4
WHERE b.check IS NULL

น่าจะแนวๆ นี้มั้ง

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

แล้วจะทำยังไงให้มันแสดงผล ได้เป็น
--------------------------
google.com จาก pr 1 เป็น 2
nipa.com ถูกลบ
thaiseoboard.com ถูกเพิ่ม
--------------------------
ได้บ้างครับ?

เป็นผมๆ ก็ทำอย่างที่ตอบใน pm ไปแหละครับ (select แยกแล้วมาวนลูปเีทียบเอา)

เพราะดูจากความต้องการ ก็ต้องการแสดงผลละเอียดพอดู
พวกนี้ต้องทำบน php แล้วล่ะครับ

 Tongue
บันทึกการเข้า

ManyMoney
คนรักเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 192



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 23 ธันวาคม 2008, 02:29:38 »

สรุปผมควรจะ select 2 ครั้ง
$sqlA = select domain , update , keyword , pr From Table Where check=4
และ
$sqlB =  select domain , update , keyword , pr From Table Where check=5
แบบนี้ใช่ไหมครับ

แล้วจะเอาค่า array มาเทียบกันยังไงดีครับ?
$resultA = mysql_db_query($dbname,$sqlA);
$resultB = mysql_db_query($dbname,$sqlB);
while ($rowA = mysql_fetch_array($resultA)) {
งงตรงเนียครับ?
}


สงสัยครับ ถ้าเปรียบเทียบ Select 2 ครั้งด้านบน กับ LEFT JOIN ตามที่คุณ Ethaizone แนะนำ อย่างไหนดีกว่าครับ? หรือว่ามันเหมือนกันครับ
แล้ว วิธี LEFT JOIN จะ เทียบข้อมูล 2 array ยังไงครับ? ขอบคุณมากครับ
บันทึกการเข้า

http://www.thaiseoboard.com/in...250.msg2456335.html#msg2456335 หานายทุนโรงไฟฟ้าพลังสะอาด

ขายที่ดินสวนผึ้ง พร้อมบ้าน7หลัง รวม12ไร่ ด้านหน้าติดถนน ด้านหลังติดเขา มีธารน้ำ วิวสวยที่สุดในสวนผึ้ง ขายรวม 12.7 ล้านบาท ภบท.5 สนใจpmขอดูรูปได้เลยครับ
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 23 ธันวาคม 2008, 02:33:07 »

เดียวก่อนนะครับ ที่จะทำนี้คือแค่เทียบ pr กับแสดงเว็บหรือเปล่า ไม่แน่อาจทำแบบนี้ได้

SELECT a.domain, a.pr, b.domain, b.pr
FROM table a
OUTER JOIN table b ON a.domain = b.domain
WHERE a.check = 4 AND b.check = 5

แล้วมันน่าจะได้รายการมาแนวนี้

google.com  | 1 | google.com  | 2   |
live.com      | 2 |  live.com      | 2 |
nipa.com     | 4 |                   |    |
                 |    | thaiseoboard.com   |9 |

ก็พอเป็น array ก็เทียบกันเลย ถ้าต่างกัน ก็คือ pr อัพเดต
ถ้ามีตัวหน้า ตัวหลังค่าเปล่า ก็เว็บโดนลบ
เหมือนกัน ถ้าตัวหน้าไม่มี แต่ตัวหลังมาใหม่ (อย่างไทยเสียว) ก็คือเว็บโดนเพิ่ม

ไม่น่ายากแล้วนะครับ  Tongue
บันทึกการเข้า

ManyMoney
คนรักเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 192



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 23 ธันวาคม 2008, 02:43:31 »

เดียวก่อนนะครับ ที่จะทำนี้คือแค่เทียบ pr กับแสดงเว็บหรือเปล่า ไม่แน่อาจทำแบบนี้ได้

SELECT a.domain, a.pr, b.domain, b.pr
FROM table a
OUTER JOIN table b ON a.domain = b.domain
WHERE a.check = 4 AND b.check = 5

แล้วมันน่าจะได้รายการมาแนวนี้

google.com  | 1 | google.com  | 2   |
live.com      | 2 |  live.com      | 2 |
nipa.com     | 4 |                   |    |
                 |    | thaiseoboard.com   |9 |

ก็พอเป็น array ก็เทียบกันเลย ถ้าต่างกัน ก็คือ pr อัพเดต
ถ้ามีตัวหน้า ตัวหลังค่าเปล่า ก็เว็บโดนลบ
เหมือนกัน ถ้าตัวหน้าไม่มี แต่ตัวหลังมาใหม่ (อย่างไทยเสียว) ก็คือเว็บโดนเพิ่ม

ไม่น่ายากแล้วนะครับ  Tongue

ขอบคุณมากครับ  เดี๋ยวขอไปลองดูก่อน
บันทึกการเข้า

http://www.thaiseoboard.com/in...250.msg2456335.html#msg2456335 หานายทุนโรงไฟฟ้าพลังสะอาด

ขายที่ดินสวนผึ้ง พร้อมบ้าน7หลัง รวม12ไร่ ด้านหน้าติดถนน ด้านหลังติดเขา มีธารน้ำ วิวสวยที่สุดในสวนผึ้ง ขายรวม 12.7 ล้านบาท ภบท.5 สนใจpmขอดูรูปได้เลยครับ
alert
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 50
ออฟไลน์ ออฟไลน์

กระทู้: 1,741



ดูรายละเอียด
« ตอบ #11 เมื่อ: 23 ธันวาคม 2008, 03:18:32 »

select domain , update ,keyword,pr from table where check=4
minus
select domain , update ,keyword,pr from table where check=5

มันก็กลายเป็นหลาย table แล้วหล่ะ ผมไม่รู้ชื่อ table นะ ไปเปลี่ยนเอาเองนะครับ  Smiley

เล่น oracle เหรอครับ

คือ minus ใน mysql มันไม่มีอะ
อยากใช้ ต้องเล่น left join แทน


เหอะๆๆ จริงด้วยครับ โทษทีครับ ไม่ได้ลองก่อนเพราะเครื่องผมไม่มี mysql อ่ะครับ แต่ตอนนี้ก็น่าจะ okแล้วนี่ครับ บอกซะขนาดนั้นน่าจะได้แล้วหล่ะ Smiley
บันทึกการเข้า

***** รับซื้อเว็บไซต์สายขาวคุณภาพ  ตั้งแต่ 500-30,000 uip มี traffic มาจาก Google  และไม่เคยโดนแบน adsense  เสนอราคามาทาง pm ได้เลยครับ *****
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 23 ธันวาคม 2008, 05:18:02 »

มาแปะแถม

อย่าลืมนะครับ พวกฟิลด์ที่มีการใช้งาน
เช่นใช้ใน on หรือ where (ถ้าจากตัวอย่าง ก็คือ check)

ทำ index ให้มันด้วย กินพื้นที่หน่อย แต่ไวขึ้นแน่นอน  :Smiley

(ทำใน phpmyadmin ก็ได้)
บันทึกการเข้า

ManyMoney
คนรักเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 192



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 23 ธันวาคม 2008, 09:51:48 »

ไม่ออกอะครับ มัน error
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
งมทั้งคืนเลยครับ
 Huh? Huh? Huh? Huh? Huh?
บันทึกการเข้า

http://www.thaiseoboard.com/in...250.msg2456335.html#msg2456335 หานายทุนโรงไฟฟ้าพลังสะอาด

ขายที่ดินสวนผึ้ง พร้อมบ้าน7หลัง รวม12ไร่ ด้านหน้าติดถนน ด้านหลังติดเขา มีธารน้ำ วิวสวยที่สุดในสวนผึ้ง ขายรวม 12.7 ล้านบาท ภบท.5 สนใจpmขอดูรูปได้เลยครับ
ManyMoney
คนรักเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 192



ดูรายละเอียด เว็บไซต์
« ตอบ #14 เมื่อ: 23 ธันวาคม 2008, 12:59:38 »

พอเปลี่ยนจาก OUTER JOIN เป็น Left หรือ right มันไม่มี error แล้วครับ
แต่ว่าข้อมูลที่ ถูกลบ และ ถูกเพิ่ม มันหายไปจาก result ครับ
อันนี้ที่หายไป
nipa.com     | 4 |                   |    |
              |    | thaiseoboard.com   |9 |
ต้องทำยังไงให้ได้ค่าพวกนี้ครับ

บันทึกการเข้า

http://www.thaiseoboard.com/in...250.msg2456335.html#msg2456335 หานายทุนโรงไฟฟ้าพลังสะอาด

ขายที่ดินสวนผึ้ง พร้อมบ้าน7หลัง รวม12ไร่ ด้านหน้าติดถนน ด้านหลังติดเขา มีธารน้ำ วิวสวยที่สุดในสวนผึ้ง ขายรวม 12.7 ล้านบาท ภบท.5 สนใจpmขอดูรูปได้เลยครับ
Pipo
Newbie
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 99



ดูรายละเอียด เว็บไซต์
« ตอบ #15 เมื่อ: 23 ธันวาคม 2008, 14:46:28 »

พวกเทียบๆ กันผมชอบใช้ hash (associative array)
เดาว่า check คือ field ที่บอกครั้งที่ update ล่าสุด
พอดีอยากลองเขียนดู ผลเป็นดังนี้

โค๊ด:
<?php

$cfg_db_host =
"localhost";
$cfg_db_name = "db_name";
$cfg_db_user = "root";
$cfg_db_pass = "";

$db mysql_connect($cfg_db_host,$cfg_db_user,$cfg_db_pass); 
mysql_select_db($cfg_db_name);
if (!
$db) { die('Could not connect: ' mysql_error()); }
mysql_query("SET NAMES UTF8");
mysql_query("SET character_set_results=UTF8");

$sql "SELECT `domain`,`pr` FROM `test` WHERE `check` = 4";
$result mysql_query($sql);
if (!
$result) { echo "$sql"; die("\n Invalid query: " mysql_error()); }
while(
$row mysql_fetch_array($result)) {
$check_old[$row['domain']]['pr'] = $row['pr'];
}
mysql_free_result($result);

$sql "SELECT `domain`,`pr` FROM `test` WHERE `check` = 5";
$result mysql_query($sql);
if (!
$result) { echo "$sql"; die("\n Invalid query: " mysql_error()); }
while(
$row mysql_fetch_array($result)) {
$check_new[$row['domain']]['pr'] = $row['pr'];
}
mysql_free_result($result);
mysql_close($db);



foreach (
array_keys($check_new) as $domain) { 
$pr_new $check_new["$domain"]['pr'];
# มีทั้งใหม่และเก่า
if ($check_old["$domain"]) { 
$pr_old $check_old["$domain"]['pr'];
if ($pr_new != $pr_old) { 
echo "$domain เปลี่ยน pr $pr_old -> $pr_new\n";
}
}
# ไม่มีในตัวเก่า
else { 
echo "$domain ถูกเพิ่ม\n";
}
}


foreach (
array_keys($check_old) as $domain) { 
# ไม่มีในตัวใหม่
if (!$check_new["$domain"]) { 
echo "$domain ถูกลบ\n";
}
}


?>
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #16 เมื่อ: 23 ธันวาคม 2008, 14:59:51 »

พอเปลี่ยนจาก OUTER JOIN เป็น Left หรือ right มันไม่มี error แล้วครับ
แต่ว่าข้อมูลที่ ถูกลบ และ ถูกเพิ่ม มันหายไปจาก result ครับ
อันนี้ที่หายไป
nipa.com     | 4 |                   |    |
              |    | thaiseoboard.com   |9 |
ต้องทำยังไงให้ได้ค่าพวกนี้ครับ

เอิ้ก ลืมไป คือเป้าหมายต้องทำ full outer join
เพิ่งค้น mysql ทำม่ายด้ายย = =" ไม่ใช่ oracle (พลาดแบบคุณ watchi เลย)
งั้นเปลี่ยนมาใช้ union แทนละกันครับ  Tongue

SELECT a.domain, a.pr FROM table a LEFT JOIN table b ON a.domain = b.domain
UNION
SELECT b.domain, b.pr FROM table a RIGHT JOIN table b ON a.domain = b.domain

 Lips Sealed
บันทึกการเข้า

Seree
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 10



ดูรายละเอียด
« ตอบ #17 เมื่อ: 23 ธันวาคม 2008, 17:23:49 »

จาก table นี้นะครับ
domain      | update                 | keyword          | pr | check
---------------------------------------------------------------------------------------------------------------------------------
google.com   | 2008-10-11 13:01 | seo,search engine,google    | 1 | 3
google.com   | 2008-11-02 21:01 | search engine,google       | 1 | 4
live.com      | 2008-11-02 10:17 | live,microsoft,search      | 2 | 4
nipa.com      | 2008-11-01 08:23 | nipa,ads,thai       | 9 | 4
google.com   | 2008-11-02 21:01 | search engine,google       | 2 | 5
live.com      | 2008-11-02 10:17 | live,microsoft,search      | 2 | 5
thaiseoboard.com   | 2008-11-04 11:34 | ไทยเสียว,seo,หาเงิน      | 9 | 5

อยากเทียบระหว่าง check=4 กับ check=5 ว่าต่างกันตรงไหนบ้าง
แล้วแสดงผลเป็น
-----------------------------------------
google.com จาก pr 1 เป็น 2
nipa.com ถูกลบ
thaiseoboard.com ถูกเพิ่ม
-----------------------------------------
แค่เนี่ยอ่ะครับ คือถ้าข้อมูลน้อยๆผมก็จะใช้วิธี select เทียบทีละอันเลย  แต่ว่าข้อมูลมันมีเยอะระดับหลัก หลายๆพัน ควรทำยังไงครับที่จะเร็วที่สุดครับ?
ถ้าผมจจะ select * where check = 5 ก่อนแล้วได้เป็น array แล้วอยากจะเอาไปเทียบกับ where check=4 ยังไงให้ได้ผลลัพท์ที่ต้องการได้เร็วและประหยัดcpuสุดๆครับ?

รบกวนชี้แนะด้วยครับ ผมงมมาหลายวันแล้วครับ


อันนี้ครับ ทีเดียวจบ

โค๊ด:
select distinct domain,
ifnull(
(select concat(pr,'->',l1.pr) from Lab l2 where l1.domain=l2.domain and chk=4),
'New') 'status'
from Lab l1
where chk=5
union
select distinct domain,
'Deleted'
from Lab l1
where chk=4 and (select count(*) from Lab where domain=l1.domain and chk=5)=0
;

ผลลัพธ์ตย.ครับ
« แก้ไขครั้งสุดท้าย: 23 ธันวาคม 2008, 17:29:40 โดย Seree » บันทึกการเข้า
ManyMoney
คนรักเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 192



ดูรายละเอียด เว็บไซต์
« ตอบ #18 เมื่อ: 24 ธันวาคม 2008, 03:37:09 »

ขอบคุณทั้ง 3 ท่านมากๆครับ สุดยอดมากๆเลยครับ

คือจากตัวอย่างโจทย์ผมเช็คแค่ PR อย่างเดียว แต่จริงๆแล้วผมต้องการเช็คอย่างอื่นด้วย เช่น
update , keyword ,... จริงๆมีประมาณ 50 อันที่ต้องการตรวจสอบความแตกต่าง
อยากทราบว่า จากข้างบนทั้ง 3 วิธี วิธีไหนที่จะทำงานได้ดีที่สุด เร็วที่สุด และไม่loadเครื่องมากครับ?
 
domain      | update                 | keyword          | pr | check
---------------------------------------------------------------------------------------------------------------------------------
google.com   | 2008-10-11 13:01 | seo,search engine,google    | 1 | 3
google.com   | 2008-11-02 21:01 | search engine,google       | 1 | 4
live.com      | 2008-11-02 10:17 | live,microsoft,search      | 2 | 4
nipa.com      | 2008-11-01 08:23 | nipa,ads,thai       | 9 | 4
google.com   | 2008-11-02 21:01 | search engine,google       | 2 | 5
live.com      | 2008-11-02 10:17 | live,microsoft,search      | 2 | 5
thaiseoboard.com   | 2008-11-04 11:34 | ไทยเสียว,seo,หาเงิน      | 9 | 5


แบบของคุณ Pipo มันต้อง select 2 ครั้งเข้าใจง่ายดีครับ ถ้าจะเพิ่มการตรวจสอบอีกสัก 50ช่องต้องแก้ยังไงให้สั้นที่สุดครับ

แบบของคุณ EThaiZone union แล้วใส่ where ต้องไหนครับ ทั้ง2selectหรือว่า ทำรวมเลย ทำไมผมมีerrorทั้งคู่

แบบของคุณ Seree  สุดยอดน่าใช้มากครับ แต่พอผมไปลองใช้งานจริง คือเปรียบเทียบหลายๆfieldพร้อมๆกันแล้วมัน errorอ่ะครับ หรือผม เขียนอะไรผิดช่วยแนะนำหน่อยครับ?

ช่วยยกตัวอย่างกรณี เปรียบเทียบมากๆหลายๆช่องหน่อยครับ เช่น pr ,update ,keyword ,seo ,score ,index ,visit ,uip ,pageview ,ip ,respondtime ,type ,size , position , rate ,... สมมุติว่ามี 50 field ควรแก้ยังไงครับ?

บันทึกการเข้า

http://www.thaiseoboard.com/in...250.msg2456335.html#msg2456335 หานายทุนโรงไฟฟ้าพลังสะอาด

ขายที่ดินสวนผึ้ง พร้อมบ้าน7หลัง รวม12ไร่ ด้านหน้าติดถนน ด้านหลังติดเขา มีธารน้ำ วิวสวยที่สุดในสวนผึ้ง ขายรวม 12.7 ล้านบาท ภบท.5 สนใจpmขอดูรูปได้เลยครับ
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #19 เมื่อ: 24 ธันวาคม 2008, 08:21:59 »

กรำๆ ผมลืมใส่ where ให้

SELECT a.domain, a.pr FROM table a LEFT JOIN table b ON a.domain = b.domain WHERE a.check=4
UNION
SELECT b.domain, b.pr FROM table a RIGHT JOIN table b ON a.domain = b.domain WHERE b.check=5

ช่วยยกตัวอย่างกรณี เปรียบเทียบมากๆหลายๆช่องหน่อยครับ เช่น pr ,update ,keyword ,seo ,score ,index ,visit ,uip ,pageview ,ip ,respondtime ,type ,size , position , rate ,... สมมุติว่ามี 50 field ควรแก้ยังไงครับ?

ถ้าเป็นเช็คเยอะๆ ก็คงต้อง query แยกแล้วลง array มาตรวจหาคู่ดูครับ (กลับมาพื้นฐานเลย)
เพราะใช้แนวคิดแบบ minus ไม่ได้ เพราะข้อมูลมันมากกว่าชนิดตัวเลข
แต่อาจใช้แบบ full outer join ได้

ส่วนแบบคุณ Seree ละก็ ไม่อยากบลัฟนะครับ แต่มันอืดแน่นอน
เรื่องประมวลผลแนะนำมาทำบน php นะดีกว่า
select ตั้งหลายรอบ  Tongue
บันทึกการเข้า

หน้า: [1] 2   ขึ้นบน
พิมพ์