簡體   English   中英

mysql選擇與id數組匹配的多行

[英]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})";
....

問題1

我不確定我理解你們all of them意思,但如果你使用OR就意味着“任何這些條件都可以成立,即使其中有多個是真的。” 這與“或”的常用英語用法不同,后者將是排他性的。

如果您希望所有條件同時為真,請使用AND

在與查詢同時比較多個條件時,使用IN而不是OR也更簡單,更有效。

問題2

一個准備好的語句,`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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM