0 レビュー
2 回答
PHP mysql select where array in array
id | sales_id
===+================
1 | 1,2
2 | 1,2
3 | 3
4 | 1
$id = array('1','2');
$query->where($id.' IN (sales_id)');
リターンIDが必要です:1,2,4
配列を含む列から
配列のどこで可能ですか?
foreachで解決しましたが、もっと良い解決策があると思います
$sales = $this->getSales();
foreach ($sales as $sale) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*');
$query->from('#__hair_service');
$query->order('ordering ASC');
if($id){
$query->where('id = '.$id);
}
$query->where('state = 1');
$query->where($sale->id.' IN (sales_id)');
$db->setQuery($query);
$results[] = $db->loadObjectList();
}
$services = array();
foreach($results as $result) {
$services = array_merge($services, $result);
}
return $services;
わからない
0
レビュー
答え :
解決策:
IN
ステートメントで配列を使用する方法が質問の場合、このコードは次のように役立ちます。< / p>
$ ids = array(1,2,3);
$ stm = $ pdo-> prepare( "SELECT * FROM t WHERE sales_id IN(?、?、?)");
$ stm-> execute($ ids);
明らかに、配列に含まれる値の数が常にわかるとは限らないため、これを使用してプレースホルダーを動的に生成できます。
$ ids = array(1,2,3);
$ in = str_repeat('?、'、count($ ids)-1)。 '?';
$ sql = "SELECT * FROM table WHERE sales_id IN($ in)";
$ stm = $ db-> prepare($ sql);
$ stm-> execute($ ids);
$ data = $ stm-> fetchAll();
すべての要素をまとめた別の配列要素を追加することも検討できます:
$ ids = array(1,2,3);
$ ids [] = implode( "、"、$ ids);
$ in = str_repeat('?、'、count($ ids)-1)。 '?';
$ sql = "SELECT * FROM table WHERE sales_id IN($ in)";
$ stm = $ db-> prepare($ sql);
$ stm-> execute($ ids);
$ data = $ stm-> fetchAll();
残念ながら、IDのすべてのバリエーション、つまり1,2 / 2,1 / 1,3 / 1,2,3をテストする必要がある場合、これは役に立ちません。これには、おそらくデータベース設計のレビューが必要になります
わからない
0
レビュー
答え :
解決策:
これが私の答えです->where( "col IN("。$elements。")")
$id = array(1,2,3);
$query->where('id IN ('.implode(',',$id).')');
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。