Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

आईपी ​​​​एड्रेस रेंज से मेल खाने वाले MySQL विवरण रिकॉर्ड का सारांश - mySQL जेडी नाइट आवश्यक

अपनी मौजूदा डेटा संरचना के साथ, आप निम्नानुसार स्ट्रिंग मिलान कर सकते हैं (लेकिन यह बहुत कुशल नहीं है):

SELECT   schools.school, detail.filename, COUNT(*)
FROM     schools
    JOIN ipranges ON schools.id = ipranges.school_id
    JOIN detail   ON detail.ip_address LIKE REPLACE(ipranges.ip_range, 'x', '%')
WHERE    schools.consortium_id = ?
GROUP BY schools.school, detail.filename

एक बेहतर तरीका यह होगा कि आप अपने आईपी रेंज को नेटवर्क एड्रेस और प्रीफिक्स लेंथ के रूप में स्टोर करें:

ALTER TABLE ipranges
  ADD COLUMN network INT UNSIGNED,
  ADD COLUMN prefix  TINYINT;
UPDATE ipranges SET
  network = INET_ATON(REPLACE(ip_range, 'x', 0)),
  prefix  = 32 - 8*(CHAR_LENGTH(ip_range) - CHAR_LENGTH(REPLACE(ip_range,'x',''));
ALTER TABLE ipranges
  DROP COLUMN ip_range;

ALTER TABLE detail
  ADD COLUMN ip_address_new INT UNSIGNED;
UPDATE detail SET
  ip_address_new = INET_ATON(ip_address);
ALTER TABLE detail
  DROP COLUMN ip_address,
  CHANGE ip_address_new ip_address INT UNSIGNED;

तब यह केवल कुछ तुलना करने का मामला होगा:

SELECT   schools.school, detail.filename, COUNT(*)
FROM     schools
    JOIN ipranges ON schools.id = ipranges.school_id
    JOIN detail   ON detail.ip_address & ~((1 << 32 - ipranges.prefix) - 1)
                   = ipranges.network
WHERE    schools.consortium_id = ?
GROUP BY schools.school, detail.filename


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अद्यतन के साथ डेटाबेस परिनियोजन

  2. mysqli और mysql डेटाबेस कमांड में डालें

  3. पीडीओ वस्तु के साथ परेशानी

  4. Php और MySQL में सरल पसंद/नापसंद रेटिंग प्रणाली

  5. लेन-देन के साथ mysql की अंतिम सम्मिलित आईडी कैसे काम करती है? + लेनदेन प्रश्न