Tôi có bảng cơ sở dữ liệu MySQL có chứa ID bài viết (khóa chính) và Tiêu đề bài viết. Tôi muốn xóa các tiêu đề trùng lặp khỏi bảng nhưng giữ nguyên lần xuất hiện đầu tiên. Tôi ban đầu chỉ đơn giản là đã làm một truy vấn cho tất cả các danh hiệu trùng lặp:Làm cách nào để mô phỏng OFFSET trong câu lệnh UPDATE của MySQL?
SELECT
title,
count(id) AS count
FROM articles
GROUP BY title
HAVING count > 1
Sau đó, tôi thay thế tất cả các chức danh tương tự có trống sử dụng một vòng lặp foreach và lệnh này:
UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
Tôi muốn cập nhật articles
bảng và thay thế tất cả các tiêu đề trùng lặp ngoại trừ mục nhập đầu tiên, dựa trên Điều ID ASC sử dụng một cái gì đó như thế này. Vấn đề là OFFSET dường như không hoạt động trong một UPDATE. Có cách nào để thực hiện điều này trong một truy vấn không?
UPDATE articles
SET title = ''
WHERE title = '$duplicate_title'
ORDER BY id ASC
OFFSET 1
bạn có thể giải thích những gì a và? cú pháp nào? Tôi đã nhìn thấy thứ như 'lừa đảo' trong các truy vấn khác và tôi đã không thể hiểu nó ngay cả sau khi đọc về những gì đang xảy ra. –
'?' Là một trình giữ chỗ tham số thường được sử dụng trong [báo cáo đã chuẩn bị] (http://en.wikipedia.org/wiki/Prepared_statement) cho một ứng dụng khách tinh vi phù hợp (như mở rộng PDO của PHP) – Phil
OK, tôi đã rõ ràng các ? và PDO. Bây giờ những gì 'UPDATE bài viết a' và' SELECT 1 FROM bài viết phụ' làm gì? Cụ thể, tôi có nghĩa là 'a' và' sub'. Đó có phải là lối tắt cho 'bài viết dưới dạng a' cho phép chúng tôi truy cập dữ liệu từ truy vấn bên ngoài trong truy vấn bên trong mà không có xung đột không? –