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

Mysql Lựa chọn lồng nhau

Tôi đã thêm câu trả lời cho câu hỏi trước, vui lòng tham khảo câu trả lời trước để hiểu rõ.

Bạn không thể lấy nó từ bb_ratings một mình bằng cách NHÓM nó và hack nó. Bạn nhận được Null vì bạn đang suy nghĩ về lưới chứ không phải tập quan hệ (đó là khái niệm trung tâm của Mô hình quan hệ).

  1. Trước khi bạn quyết định (các) bảng nào sẽ chuyển đến, để phục vụ truy vấn của mình, bạn cần quyết định xem bạn muốn gì cho cấu trúc của tập kết quả của mình.

  2. Sau đó, ràng buộc nó (hàng nào) bằng WHERE mệnh đề.

  3. Sau đó, tìm ra nơi (bảng nào) để lấy các cột từ đó. Tham gia vào nhiều bảng hơn và nhiều bảng khác hoạt động trên WHERE mệnh đề; hoặc truy vấn con vô hướng, tương quan với truy vấn bên ngoài.

Bạn không rõ ràng về những gì bạn muốn. Có vẻ như bạn muốn báo cáo giống như câu hỏi trước đó, cộng với một cột cho phiếu bầu của người dùng nhất định. Đối với tôi, cấu trúc của tập kết quả của bạn là một danh sách các bản tin. Tôi có thể lấy điều đó từ bulletin , không cần phải truy cập bulletin_like và sau đó phải NHÓM cái đó.

Nếu bạn nghĩ về mặt tập hợp, nó rất dễ dàng, không cần phải nhảy qua các vòng với các chế độ xem cụ thể hóa hoặc các truy vấn "lồng nhau":

SELECT name AS bulletin, 
    (SELECT COUNT(like) 
        FROM  bulletin_like bl 
        WHERE bl.bulletin_id = b.bulletin_id 
        AND   like = 1
        ) AS like,
    (SELECT COUNT(like) 
        FROM  bulletin_like bl 
        WHERE bl.bulletin_id = b.bulletin_id 
        AND   like = 0
        ) AS dislike,
    (SELECT COUNT(like) 
        FROM  bulletin_like bl 
        WHERE bl.bulletin_id = b.bulletin_id 
        AND   bl.user_id = {$user_d}
        AND   like = 1
        ) AS your_vote
    FROM bulletin b

Phản hồi cho nhận xét

Tôi có cảm giác rằng những gì bạn đang nói rất quan trọng đối với cách tôi tiếp cận SQL

  1. Phải, chắc chắn rồi. Nếu bạn sẵn sàng tìm hiểu những thứ phù hợp từ trước, nó sẽ:

    • tiết kiệm cho bạn tất cả các loại vấn đề sau này
    • làm cho các truy vấn của bạn hiệu quả hơn
    • cho phép bạn viết mã nhanh hơn
      .
  2. Bây giờ, hãy quên việc sử dụng tập kết quả dưới dạng bảng (chậm hơn nhiều) và bảng tạm thời (chắc chắn không cần thiết nếu cơ sở dữ liệu của bạn được Chuẩn hóa). Bạn nhiều tốt hơn nên truy vấn trực tiếp các bảng. Bạn cần học các môn học khác nhau như Mô hình quan hệ; cách sử dụng SQL; làm thế nào không sử dụng SQL để tránh các vấn đề; vv Tôi sẵn sàng giúp đỡ bạn, và ở lại với bạn trong một thời gian, nhưng tôi cần biết rằng bạn sẵn lòng. Sẽ mất một chút thời gian qua lại. Có một chút ồn ào trên trang web này, vì vậy tôi sẽ bỏ qua các bình luận khác (cho đến khi kết thúc) và chỉ trả lời cho bạn.

    • ngừng sử dụng GROUP BY , nó đang cản trở nghiêm trọng sự hiểu biết của bạn về SQL. Nếu bạn không thể nhận được báo cáo mình muốn mà không sử dụng GROUP BY , đặt một câu hỏi.
      .
  3. Câu hỏi đã đăng này. Hãy cho tôi biết bạn bị lạc vào thời điểm nào và tôi sẽ cung cấp thêm thông tin chi tiết từ thời điểm đó trở đi.

    • Đối với câu hỏi này, bạn muốn có một danh sách các bản tin, với các lượt thích; không thích; và điều này người dùng thích. Đúng không ? Bạn đã thử mã mà tôi cung cấp chưa?
      .
  4. Đã xem xét câu hỏi được liên kết. Đó là một mớ hỗn độn, và không ai giải quyết vấn đề sâu sắc hơn; họ đã trả lời vấn đề trên bề mặt, một cách cô lập. Bây giờ bạn có một câu trả lời nhưng bạn không hiểu nó. Đó là một cách rất chậm để tiến bộ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay đổi nội dung dựa trên lựa chọn thả xuống từ cơ sở dữ liệu mysql

  2. Sự cố CloudSQL PDO (unix_socket) trên Google App Engine

  3. MYSQL số ​​lượng bản ghi được chèn và cập nhật

  4. Sự khác biệt về hiệu suất giữa các đối chiếu bảng trong MySQL

  5. tôi có thể tin tưởng mysql_insert_id () trả về giá trị chính xác không, hoang tưởng đa luồng