Vì lý do nào đó, tôi cần phải đi qua một tập kết quả mysql hai lần. Có cách nào để làm điều đó? Tôi không muốn chạy truy vấn hai lần và tôi không muốn phải viết lại tập lệnh để nó lưu trữ các hàng ở đâu đó và sau đó sử dụng lại chúng sau này.Làm thế nào để đi qua kết quả mysql hai lần?
Trả lời
Đây là cách bạn có thể làm điều đó:
$result = mysql_query(/* Your query */);
while($row = mysql_fetch_assoc($result)){
// do whatever here...
}
// set the pointer back to the beginning
mysql_data_seek($result, 0);
while($row = mysql_fetch_assoc($result)){
// do whatever here...
}
Tuy nhiên, tôi sẽ phải nói, điều này dường như không đúng cách để xử lý điều này. Tại sao không xử lý trong vòng đầu tiên?
tại sao mysql_fetch_assoc()? Tôi có thể sử dụng mysql_fetch_array() –
A-OK: Có, bất cứ điều gì bạn thích. – phant0m
Có, bạn có thể. Đó là điều tương tự, chỉ là những cách khác nhau để lấy nó (tên cột/số cột). –
Hãy thử xem mysql_data_seek() có thực hiện những gì bạn cần không.
mysql_data_seek() di chuyển con trỏ hàng nội bộ của kết quả MySQL liên quan đến việc xác định kết quả định danh để trỏ đến các quy định số liên tiếp. Cuộc gọi tiếp theo tới hàm tìm nạp MySQL , chẳng hạn như mysql_fetch_assoc(), sẽ trả về hàng đó.
row_number bắt đầu từ 0. Các row_number phải là một giá trị trong khoảng từ 0 để mysql_num_rows() - 1. Tuy nhiên nếu tập kết quả là rỗng (mysql_num_rows() == 0), một tìm cách 0 sẽ thất bại với một E_WARNING và mysql_data_seek() sẽ trả về FALSE
Bạn có thể sử dụng mysql_data_seek để di chuyển con trỏ vào đầu bộ dữ liệu. Sau đó, bạn chỉ có thể lặp lại thông qua nó một lần nữa.
tôi thú nhận tôi đã không cố gắng này, nhưng bạn đã thử sau khi lặp đầu tiên của bạn
mysql_data_seek($queryresult,0);
đi đến kỷ lục đầu tiên?
Vâng, bạn luôn có thể đếm số hàng bạn đọc, và sau đó làm một cái gì đó như thế này:
if (rownumber == mysql_num_rows($result)) { mysql_data_seek($result, 0); }
Không biết lý do tại sao bạn sẽ cần phải, nhưng có nó được.
Thay thế cho dữ liệu tìm kiếm là để lưu trữ các giá trị vào một mảng:
$arrayVals = array();
$result = mysql_query(/* Your query */);
while($row = mysql_fetch_assoc($result)){
$arrayVals[] = $row;
}
// Now loop over the array twice instead
$len = count($arrayVals);
for($x = 0; $x < $len; $x++) {
$row = $arrayVals[$x];
// Do something here
}
$len = count($arrayVals);
for($x = 0; $x < $len; $x++) {
$row = $arrayVals[$x];
// Do something else here
}
Tôi đã viết một chức năng trợ giúp tôi gọi multiRow() mà làm tất cả những gì và chỉ trả về và mảng của hàng mảng. –
Đối mysqli bạn nên làm như sau;
$result= $con->query($sql); // $con is the connection object
$result->data_seek(0);
- 1. Làm thế nào để tham khảo một CTE hai lần?
- 2. facebook như tìm kiếm ajax - làm thế nào để đi qua kết quả bằng cách sử dụng bàn phím
- 3. Làm thế nào để trừ một kết quả truy vấn từ kết quả truy vấn khác trong MYSQL
- 4. Có chọn Tiếp theo là Kết quả trong hai lần lặp qua IEnumerable không?
- 5. Làm thế nào để kết hợp hai bảng dữ liệu và đặt kết quả
- 6. MySQL - Kết hợp hai câu lệnh chọn thành một kết quả với LIMIT hiệu quả
- 7. Làm thế nào để lấy kết quả không phù hợp trong mysql
- 8. đối tượng đi qua để đưa ra kết quả trong một lỗi
- 9. Làm thế nào để foreach hoạt động khi lặp qua các kết quả hàm?
- 10. Làm thế nào để tải kết quả MySQLi được đặt thành mảng hai chiều?
- 11. Làm thế nào để kết nối hai điểm mà không vượt qua một con đường khác?
- 12. Làm thế nào để tạo kết quả truy vấn MYSQL ORDER BY điều kiện đặt hàng?
- 13. Làm thế nào để lưu trữ kết quả truy vấn MySQL trong một bảng khác?
- 14. Làm thế nào để nhóm kết quả tham gia bên trong mysql từ hàng vào cột
- 15. Làm thế nào để trích xuất giờ cho kết quả MySQL FROM_UNIXTIME()?
- 16. Làm thế nào để bạn kết hợp hai repo git?
- 17. Làm thế nào để kết hợp hai mảng byte
- 18. Làm thế nào để sử dụng mysqlimport để đọc trong kết quả của mysqldump --databases
- 19. Làm thế nào để đồng bộ hai bảng MySQL?
- 20. Làm thế nào để CHỌN đúng INTO @TempTable Nhiều lần để trả về một kết quả đơn?
- 21. zip() thay thế cho lặp qua hai lần lặp
- 22. Bắt quả mysql từ 30 ngày qua
- 23. Neo4j Cypher: Làm thế nào để lặp qua kết quả ExecutionResult
- 24. Làm thế nào để bạn tìm thấy kết quả đã xảy ra trong tuần qua?
- 25. Làm thế nào để đọc một BufferedReader hai lần hoặc nhiều lần?
- 26. Làm thế nào để kết nối hai nút Elixir qua mạng cục bộ?
- 27. Làm thế nào để bỏ qua các file grunt làm xấu đi
- 28. Hai cách để gửi email qua SmtpClient không đồng bộ, các kết quả khác nhau
- 29. Tạo một đối tượng hai lần tạo ra các kết quả khác nhau
- 30. SQL - Chia hai kết quả
Hãy thử chức năng này đặt lại con trỏ. http://php.net/manual/en/function.mysql-data-seek.php – afarazit
Sử dụng thư viện MySQL nào? Bạn thường có thể tua lại con trỏ bên trong trong resultset. –