Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

xuất sử dụng bộ nhớ từ cơ sở dữ liệu sang csv trong php

Chỉ sử dụng hai bảng:

Truy vấn ban đầu của bạn:

SELECT subscribers.email_address, 
       subscribers.first_name, 
       subscribers.last_name, 
       t1.value AS Languages 
  FROM subscribers 
  LEFT JOIN (SELECT subscriber_id, 
                    field_id, 
                    GROUP_CONCAT(value SEPARATOR '|') AS value 
               FROM subscribers_multivalued 
              WHERE field_id=37 
              GROUP BY subscriber_id, field_id
            ) AS t1 
         ON subscribers.subscriber_id=t1.subscriber_id 
        AND t1.field_id=37 
 WHERE (list_id=49) 
   AND (state=1)

đưa ra một kế hoạch giải thích về:

id  select_type  table                    type  possible_keys  key         key_len  ref    rows  Extra
1   PRIMARY      subscribers              ref   FK_list_id     FK_list_id  4        const  2     Using where
1   PRIMARY      <derived2>               ALL   NULL           NULL        NULL     NULL   5      
2   DERIVED      subscribers_multivalued  ALL   field_fk       field_fk    4               11    Using filesort

Đề xuất tham gia của tôi:

SELECT subscribers.email_address, 
       subscribers.first_name, 
       subscribers.last_name, 
       GROUP_CONCAT(t1.value SEPARATOR '|') AS Languages 
  FROM subscribers 
  LEFT JOIN subscribers_multivalued t1 
         ON subscribers.subscriber_id=t1.subscriber_id 
        AND t1.field_id=37 
 WHERE (list_id=49) 
   AND (state=1)
 GROUP BY subscribers.email_address, 
          subscribers.first_name, 
          subscribers.last_name

đưa ra một kế hoạch giải thích về:

id  select_type  table        type  possible_keys           key            key_len  ref                             rows  Extra
1   SIMPLE       subscribers  ref   FK_list_id              FK_list_id     4        const                           2     Using where; Using filesort
1   SIMPLE       t1           ref   subscriber_fk,field_fk  subscriber_fk  4        test.subscribers.subscriber_id  1      

Mặc dù tôi chỉ điền vào hai bảng đó với một lượng dữ liệu rất nhỏ, điều này gợi ý cho tôi rằng phiên bản truy vấn của tôi sẽ thực thi hiệu quả hơn so với cơ sở dữ liệu, vì nó không sử dụng bảng dẫn xuất mà truy vấn của bạn tạo ra.

Các bảng khác có thể được liên kết với truy vấn theo cách tương tự và toàn bộ kết quả được lưu trực tiếp vào tệp csv thay vì được phân tích cú pháp thêm bằng PHP.

Điều này sẽ giúp bạn chạy nhanh hơn và tiết kiệm bộ nhớ hơn.

CHỈNH SỬA

SELECT subscribers.email_address, 
       subscribers.first_name, 
       subscribers.last_name, 
       GROUP_CONCAT(DISTINCT t1.value SEPARATOR '|') AS Colors, 
       GROUP_CONCAT(DISTINCT t2.value SEPARATOR '|') AS Languages 
  FROM subscribers 
  LEFT JOIN subscribers_multivalued AS t1 
         ON subscribers.subscriber_id=t1.subscriber_id 
        AND t1.field_id=112 
  LEFT JOIN subscribers_multivalued AS t2 
    ON subscribers.subscriber_id=t2.subscriber_id 
   AND t2.field_id=37 
 WHERE (list_id=49) 
 GROUP BY subscribers.email_address, 
          subscribers.first_name, 
          subscribers.last_name

Lưu ý việc sử dụng DISTINCT trong hàm GROUP_CONCAT ()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lấy danh sách nguồn dữ liệu ODBC trong máy tính cục bộ bằng PHP

  2. Sự khác biệt giữa INT và UUID trong MySQL

  3. Truy vấn MySQL dường như không đạt được kỳ vọng

  4. Giới hạn kích thước VARCHAR của MySQL

  5. Ghi đè liên tục MARKER Lỗi Symfony2