[英]mysql selecting multiple rows that match array of ids
首先:
SELECT `key`, `value` FROM settings
WHERE `key` = :base_url
OR `key` = :google_analytics
OR `key` = :site_domain
這是選擇多行的正確方法嗎? 或者,還有更好的方法? 因為它不是真正的OR
,而是所有這些......所以它聽起來不對。
問題2:
這是我的查詢選擇具有分頁的用戶:
SELECT id, email, verified, level, name_surname, age, sex, profession, education, location, privacy, suspend FROM users LIMIT :start, :results
有時我想傳遞用戶數組以返回此查詢,如array(1,2,3,4,5)
。
顯然,簡單地添加WHERE $array
不起作用。 那我該怎么做?
有時候我不想傳遞這個id數組,那么當有id列表和沒有id列表時如何在狀態之間切換? 我是否只是在prepare語句上創建php if else? 這似乎很明顯,但最好問一下最佳做法:)
1. where子句中的乘法值,不需要使用OR。 在查詢打擊中使用。
SELECT `key`, `value` FROM settings
WHERE `key` in ( :base_url, :google_analytics, :site_domain);
2.與第一個相同。
SELECT * FROM users where id in (1,2,3,4,5);
所以如果你有一個用戶ID數組,你必須用','膠水來破壞它。
繼承了php的一個完整的例子;
<?php
$users = array(1,2,3,4,5);
$usersStr = implode(',', $users); // returns 1,2,3,4,5
$sql = "SELECT * FROM users where id in ({$userStr})";
....
我不確定我理解你們all of them
意思,但如果你使用OR
就意味着“任何這些條件都可以成立,即使其中有多個是真的。” 這與“或”的常用英語用法不同,后者將是排他性的。
如果您希望所有條件同時為真,請使用AND
。
在與查詢同時比較多個條件時,使用IN
而不是OR
也更簡單,更有效。
一個准備好的語句,`WHERE .. IN(..)`查詢和排序 - 用MySQL
基本上你應該總是有一個數組,即使你傳入一個標量值:
$values = (array)$argument;
$conditions = implode(",", array_fill(0, count($values), "?");
// assuming you're using PDO
$stmt->execute($conditions);
對於問題1,我認為@Ronald已經給你一個鏈接來引用;
對於問題2,我認為你可以這樣做:
public function myquery($condition){
if is_string($condition){
//do something to compose the query for string
}
if is_array($condition){
//do something to compose the query for array
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.