 |
สอบถามเกี่ยวกับ การคิวรี่ข้อมูล mysqli กรณี ip address อยู่คนละวง lan ครับ |
|
 |
|
|
 |
 |
|
ต้องดูตัวอย่างข้อมูลและโครงสร้างฐานข้อมูลจึงจะตอบได้ครับ (กรณีมีการบันทึก ip จากหลายวงแลน)
|
 |
 |
 |
 |
Date :
2021-01-26 11:08:10 |
By :
lakornworld |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
where status = 2
or left(ip,LOCATE('.', length(ip) - REVERSE(ip))) <> left('xxx.xxx.xxx.xxx', length('xxx.xxx.xxx.xxx') LOCATE('.', REVERSE('xxx.xxx.xxx.xxx')))
|
ประวัติการแก้ไข 2021-01-26 12:15:42 2021-01-26 12:18:56
 |
 |
 |
 |
Date :
2021-01-26 12:09:27 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แก้ตรงนี้ก่อน ได้ผลยังไง เอามาบอก เป็นคำสั่งเช็คเออเร่อร์ จากการคิวรี่
$result = $mysqli->query($sql) or die( $mysqli->error.'<br>'.$sql);
เมื่อคิวรี่ไม่ถูกมีเออเร่อร์ มันจะส่งค่า false ออกมา
เมื่อเอา false นำไป fetch เอาค่าจากคำสั่ง mysqli::fetch_array() มันจึงแสดงเออเร่อร์ บอกว่า parameter เป็น boolean
ดังนั้นควรเช็คค่า ตั้งแต่การคิวรี่เลยครับ
|
 |
 |
 |
 |
Date :
2021-01-28 14:12:38 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อธิบายคำสั่งก่อน เพื่อจะเข้าใจไม่ตรงกัน
or left(ip,LOCATE('.', length(ip) - REVERSE(ip))) <> left('xxx.xxx.xxx.xxx', length('xxx.xxx.xxx.xxx') LOCATE('.', REVERSE('xxx.xxx.xxx.xxx')))
คำสั่งนี้ ถ้า field ที่เก็บค่า ip ไม่ตรงกับค่าที่ต้องการ ก็จะเป็นจริง และมันจะตัดเอาเลขชุดสุดท้ายออก มาเปรียบเทียบกัน
ที่ ไอ้ค่า xxx.xxx.xxx.xxx มันเป็นค่าที่กำหนดเอาไปเปรียบเที่ยบ ว่าเป็นวงแลนเดียวกันหรือไม่
ที่นี้วงแลนเดียวกัน ต้องใช้ เลข 3 ชุดแรก(ไม่รวมชุดสุดท้าย) ถีงจะเป็นวงแลนเดียวกัน แต่ ip คุณเก็บ ไม่รู้คุณเก็บถูกต้องไหม
เพราะเห็นแค่ 3ชุด เก็บเฉพาะ 3 ชุดแรกเลยหรือเปล่า หรือ อย่างไร ก็ต้องประยุกต์เอาหน่อย
โค๊ดตัวอย่าง เดาเอาว่า เก็บทั้ง 4 ชุดตัวเลข เลยเขียนตัด ชุดที่ 4 ออก แล้วนำมาเปรียบเทียบ
|
 |
 |
 |
 |
Date :
2021-01-28 14:21:31 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
กรรม ผมว่า ผมเข้าใจผิด
สิ่งที่ต้องการ คือ เมื่อคิวรี่ status = 2 ออกมาได้แล้ว
อยากจะแบ่ง group ip ที่ ต่างกัน ออกจาก กัน ใช่หรือไม่
มี 2 วิธี
1 นับแค่จำนวน ใช้ group by
select ip, count(ip) from tablename where status = 2 group by ip
2 แสดง แต่ละ ip แยกกลุ่ม ใช้ order by + php เพื่อแสดงผล
select * from tablename where status = 2 order by ip
php
Code (PHP)
$old_ip = '';
while($ro = $result->fetch_assoc()){
if( $old_ip <>$ro->ip){
echo 'group '.$ro->ip.'</br>'; $old_ip=$ro->ip;
}
print_r($ro);
}
|
 |
 |
 |
 |
Date :
2021-01-29 04:35:40 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เท่าที่จำได้ IP4 a.b.c.d มีตัวเลขอยู่ 4 ชุด
(เอาให้ลึกสุดใจ เรียน 4 ปีก็ไม่น่าจะจบ)
ชุดที่ 3 คือตัวบ่งบอก วงแลน (คล้ายฯ วงเหี้ย) เช่น
192.168.1.1, 192.168.1.2, ..., 255 จะอยู่ในวงเดียวกัน
192.168.2.1, 192.168.2.2, ..., 255 จะอยู่ในวงเดียวกัน
Code (SQL)
select
substring_index( ip, '.', 3 ) as SubIP
, count(ip) as GCount
from _iplist
where statuspc = 'หอยใหญ่ไหม?'
group by ( SubIP )
order by GCount desc
ปล. เริ่มต้นจาก Dbase I, II, III, IV, V +55555
|
 |
 |
 |
 |
Date :
2021-01-29 09:28:48 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
@Chaidhanan
Code (PHP)
$old_ip = '';
while($ro = $result->fetch_assoc()){
if( $old_ip <>$ro->ip){
echo 'group '.$ro->ip.'</br>'; $old_ip=$ro->ip;
}
print_r($ro);
}
Since 1970 --> ยังใช้ได้จนถึงปัจจุบัน --> 2000 ปีข้างหน้า
|
 |
 |
 |
 |
Date :
2021-01-29 09:34:58 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คุยกันสนุกฯ หลายคน ในที่นี้ คือลูกชาย/ลูกสาว คนเล็ก
ลูกคนโต (ลูกชาย/ลูกสาว) มีหลานมาให้เลี้ยง หลายรุ่นแล้วง่ะ
|
 |
 |
 |
 |
Date :
2021-01-29 09:44:19 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ประเด็นมันไม่ได้อยู่คนละวงแลน แต่มันอยู่ที่ว่า คุณรู้หรือยัง ว่า ไอพี อะไร จะเอาไปใส่ไว้ที่ field ไหน
ีCode (SQL)
update tablename set field_อะไร = 'IP อะไร'
where ตรวจสอบจากอะไร
|
 |
 |
 |
 |
Date :
2021-01-29 19:36:35 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
@Chaidhanan ผมเคยเจอครับ รวยมาก เงินเดือนเกือบสามแสนบาท
ผมถามว่า เมื่อวาน เมียคุณไปไหนมา?
เขางง และทำหน้าเศร้า
|
 |
 |
 |
 |
Date :
2021-01-30 13:53:23 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|