Câu hỏi này hơi cũ, nhưng tôi nghĩ tôi chỉ thêm vào nó để tham khảo.
Tôi khuyên bạn nên bắt đầu sử dụng Zend_Db_Select với Zend_Db. Tôi đã làm rất nhiều với Zend_Db gần đây. Thêm từ Zend_Db_Select reference guide.
Hãy giả sử bạn có một bộ chuyển đổi Zend_Db: $ this -> _ db
# this will get the Zend_Db_Select object
$select = $this->_db->select();
# now you build up your query with Zend_Db_Select functions
$select->from('mytable');
$select->where('field1 = ?', $field1);
$select->where('field2 = ?', $field2);
[...]
# echo to see the SQL (helps in debugging)
# SELECT * FROM mytable WHERE field1 = ? AND field2 = ? [...]
echo '<p>My SQL: ' . $select . '</p>';
# Execute the SQL/Fetch results
$results = $select->query()->fetchAll();
Đó là những điều cơ bản từ ví dụ cho bạn, nhưng hướng dẫn tham khảo Zend Framework trên đối tượng lựa chọn có rất nhiều thông tin hữu ích về cách để xây dựng các truy vấn phức tạp hơn với JOINS, UNIONS, GROUP BY, LIMIT, HAVING, v.v.
Nếu bạn muốn sử dụng một cái tên bí danh cho một bảng hoặc các thông số, bạn sử dụng một mảng kết hợp với tên bí danh là giá trị chỉ số:
# SELECT p.* FROM products AS p
$select->from('p' => 'products');
Nếu bạn muốn quay trở lại lĩnh vực duy nhất được lựa chọn, bạn thêm một loạt các tên trường như một tham số thứ hai:
# SELECT model FROM products
$select->from(products, array(model));
trên thực tế, ở trên có thể sẽ sản xuất SQL đầy đủ như:
SELECT 'products'.model FROM 'products'
nhưng tôi đã viết ở trên cho ngắn gọn và rõ ràng trong ví dụ.
Một điều tôi vừa xem là sử dụng AND và OR trong điều kiện WHERE.
# WHERE a = $a
$select->where('a = ?', $a);
# WHERE a = $a AND b = $b
$select->where('a = ?', $a);
$select->where('b = ?', $b);
# WHERE a = $a OR b = $b
$select->where('a = ?', $a);
$select->orWhere('b = ?', $b);
# WHERE a = $a AND b = $b
$select->orWhere('a = ?', $a);
$select->where('b = ?', $b);
Lưu ý rằng mọi chức năng "nơi" bạn sử dụng sẽ kết hợp với câu lệnh trước đó làm toán hạng đó. Ok, điều đó nghe có vẻ khó hiểu.
Nếu "vị trí" thứ hai là "OR" thì đó là điều kiện "OR". Nếu "vị trí" thứ hai là "AND", câu lệnh sẽ là "VÀ".
Nói cách khác, hàm WHERE đầu tiên bị bỏ qua về điều kiện sử dụng.
Trong thực tế, tôi vừa hỏi một câu hỏi về Stack Overflow ngày hôm qua liên quan đến việc thực hiện một complex WHERE using select.
Hy vọng điều đó sẽ hữu ích! Chúc mừng!
tuyệt vời hoạt động. thankx – Max