2012-02-28 39 views
27

thể trùng lặp:
MySQL query using an array
Passing an array to mysqlMySQL PHP - CHỌN WHERE id = array()?

Tôi có một mảng trong PHP:

$array = array(1, 4, 5, 7); 

Như bạn thấy, tôi có một mảng các giá trị khác nhau, nhưng tôi muốn viết một câu lệnh MYSQL sẽ kiểm tra nếu idbằng đối với bất kỳ giá trị nào trong mảng. Ví dụ, nếu một hàng có một id của 1, nó sẽ trả về hàng đó, tương tự cho 4, 5 và 7. Độ dài của mảng có thể khác nhau do tính chất của chương trình, do đó, đó là nơi mà vấn đề là. Tôi có thể chỉ làm:

SELECT ... 
    FROM ... 
WHERE id = '$array' 

Hoặc có cách nào tốt hơn không?
Nếu tôi không rõ, hãy hỏi tôi để biết thêm thông tin.

+0

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in – jere

+0

Xem: http://meta.stackexchange.com/questions/2950/should-hi-thanks -taglines-and-salutations-be-removed-from-posts –

Trả lời

91

Sử dụng IN.

$sql = 'SELECT * 
      FROM `table` 
     WHERE `id` IN (' . implode(',', array_map('intval', $array)) . ')'; 
+2

Tôi đoán 'IN' là câu lệnh ưa thích. Ngoài ra, cảm ơn đã cho tôi biết cách đặt mảng của tôi vào đó một cách cụ thể. :) –

+2

nếu tôi có cùng id trong giá trị mảng sau đó tôi nhận được dữ liệu thời gian duy nhất tôi muốn dữ liệu đa thời gian thì tôi nên làm gì cho điều đó? –

+0

@DharaPatel Bạn có các mục chia sẻ cùng một 'id' không? Nó có thể là một quyết định thiết kế xấu để chia sẻ id (giả sử chúng là chính). – alex

18

Điều bạn đang tìm kiếm là câu lệnh IN(). Điều này sẽ kiểm tra nếu một trường đã cho chứa bất kỳ giá trị 1 hoặc nhiều hơn.

SELECT * FROM `Table` WHERE `id` IN (1, 2, 3) 

Bạn có thể sử dụng vòng lặp đơn giản để chuyển đổi biến $array thành định dạng thích hợp. Hãy chắc chắn lưu ý đến việc chèn SQL nếu các giá trị mảng của bạn đến từ giao diện người dùng.

0

Bạn có thể viết truy vấn của bạn như thế này:

select * from table where id in (1, 4, 6, 7) 

Bạn có thể thêm bao nhiêu giá trị như bạn cần.

0

Bạn có thể SELECT WHERE id IN (item1, item2...). Chỉ cần lặp qua mảng PHP của bạn để xây dựng mảng cho truy vấn.

9

Đơn giản chỉ cần sử dụng ID IN() cú pháp:

$sql = "SELECT FROM `table` WHERE `ID` IN (".implode(',',$array).")"; 
0

Bạn sẽ muốn sử dụng IN điều hành:

$sql = 'SELECT FROM WHERE id IN (' . implode(",", $array) . ')';

Có thể có một giới hạn trong MySQL trên có bao nhiêu giá trị mà bạn có thể sử dụng trong danh sách với toán tử IN.