Byla vydána nová stabilní verze 6.10 (YouTube) multiplatformního frameworku a GUI toolkitu Qt. Podrobný přehled novinek v poznámkách k vydání.
Netwide Assembler (NASM) byl vydán v nové major verzi 3.00. Přehled novinek v poznámkách k vydání v aktualizované dokumentaci.
Linuxová distribuce Frugalware (Wikipedie) ke konci roku 2025 oficiálně končí.
Byla vydána nová verze 3.0.6 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP bude brzy k dispozici také na Flathubu.
Americký výrobce čipů AMD uzavřel s americkou společností OpenAI smlouvu na několikaleté dodávky vyspělých mikročipů pro umělou inteligenci (AI). Součástí dohody je i předkupní právo OpenAI na přibližně desetiprocentní podíl v AMD.
Byla vydána nová verze 10.1 sady aplikací pro SSH komunikaci OpenSSH. Uživatel je nově varován, když se nepoužívá postkvantovou výměnu klíčů.
Byly zpracovány a na YouTube zveřejněny videozáznamy z konference LinuxDays 2025.
Na konferenci LinuxDays 2025 byl oficiálně představen nový router Turris Omnia NG.
Přímý přenos (YouTube) z konference LinuxDays 2025, jež probíhá tento víkend v Praze v prostorách FIT ČVUT. Na programu je spousta zajímavých přednášek.
$dis = array('a', 'b', 'c');a chtěl bych pomocí PDO vypsat řádky z mysql za podmínek když dejme tomu, že v poli budou tři hodnoty a,b,c:
name = a, b, ca
sign = 0, 1, 2ale nevím jak na to
$stmt = $pdo->prepare('SELECT * FROM data WHERE name = ? sign = ?;'); $stmt->execute(array(???, ???)); $result = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);čili první řádek
name = a AND sign = 0druhý řádek
name = b AND sign = 1třetí řádek
name = c AND sign = 2poradí někdo? Děkuji
SELECT * FROM data WHERE name = ? ORDER BY sign;
SELECT * FROM data WHERE name = a sign = 0; SELECT * FROM data WHERE name = b sign = 1; SELECT * FROM data WHERE name = c sign = 2;
SELECT * FROM data WHERE (name = ? AND sign = ?) OR (name = ? AND sign = ?) OR (name = ? AND sign = ?); ... $stmt->execute(array(a, 0, b, 1, c, 2));
$name = array('a','b','c','d');
$sign = array(1,2,3,4);
$query = "SELECT * FROM data";
$params = array();
for($i=0;$i< count($name);$i++){
if($i>0){
$query .= " OR";
}else{
$query .= " WHERE";
}
$query .= " (name = ? AND sign = ?)";
$params[] = $name[$i];
$params[] = $sign[$i];
}
//print $query;
$stmt = $pdo->prepare($query);
$stmt->execute($params);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
$params = array(); // nova promenna -> pole hodnot, ktere budeme bindovat for($i=0;$i< count($name);$i++){ // od nuly po delku pole (indexy zacinaji od nuly) if($i>0){ // druha az Nta podminka, tak pridame spojku OR $query .= " OR"; }else{ // je to prvni podminka, tak musime pridat WHERE $query .= " WHERE"; } $query .= " (name = ? AND sign = ?)"; // zakladni struktura podminky, pro osetreni parametru (prepared statements) dame ? // a promenne pridame do pole hodnot, prvni je name, druhe je sign -> dva otazniky, dve nove hodnoty $params[] = $name[$i]; $params[] = $sign[$i]; }
<?php $rows = array( array('a', 0), array('b', 1), array('c', 2), array('d', 3), ); $sql = "SELECT * FROM data WHERE " . implode(' OR ', array_map(function ($a) { return '(name = ? AND sign = ?)'; }, $rows) ); echo $sql, "\n"; $params = array(); foreach($rows as $row){ $params[] = $row[0]; $params[] = $row[1]; } print_r($params);
$names = array('a','b','c','d'); $params = array(); foreach($names as $key => &$item){ $params[] = $item; $params[] = $key; $item = "(name = ? AND sign = ?)"; } $sql = "SELECT * FROM data WHERE ".implode(' OR ', $names); echo $sql, "\n"; print_r($params);
$ot = array('?', '?', '?'); $name = array('a', 'b', 'c'); $sign = array('0', '1', '2'); $stmt = $pdo->prepare('SELECT * FROM data WHERE name IN($ot) AND sign IN($ot);'); $stmt->execute(array($name, $sign)); $result = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
$ot = "?, ?, ?"; $name = array('a', 'b', 'c'); $sign = array('0', '1', '2'); $stmt = $pdo->prepare('SELECT * FROM data WHERE name IN($ot) AND sign IN($ot);'); $stmt->execute(array_merge($name, $sign)); $result = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
name = 'a' AND sign = '0' name = 'b' AND sign = '1' name = 'c' AND sign = '2'Pkud bude v poli prvků 10, tak vrátit deset řádků z mysql. name a sign jsou názvy sloupců, přičemž hodnoty v poli $name se mění ale druhá podmínka pro sloupec sign je vždy pozice prvku v poli $name. Snad jsem to napsal k pochopení
name a sign jsou názvy sloupců, přičemž hodnoty v poli $name se mění ale druhá podmínka pro sloupec sign je vždy pozice prvku v poli $nameTakže
sign
je unikátní klíč a pro každé sign
je právě jedno name
(array($sign => $name)
)? Pak stačí WHERE sign IN (0, 1, 2)
.
SELECT * FROM data WHERE (name, sign) IN (?, ?);K tomuto dotazu byste pak připojil pole dvojic
array(array('a', 0), array('b', 1), array('c', 2))
.
Pokud vím, MySQL ale tuhle syntaxi nepodporuje. Některé frameworky to v takovém případě řeší tak, že ten dotaz sestaví samy. Tj. spočítají počet prvků pole, a podle toho pak vytvoří
SELECT * FROM data WHERE (name = ? AND sign = ?) [OR (name = ? AND sign = ?)…];Pokud MySQL tu syntaxi s vektorem v
IN
nepodporuje, asi budete muset použít to vytváření dotazu na míru. Pozor také na to, že počet položek v IN
může být omezený. Ale nedává smysl, abyste tam měl stovky položek, to by pak vypadalo spíš na špatný návrh aplikace, kdy si předáváte nějaké hodnoty přes aplikaci, místo abyste použil JOIN
.
Tiskni
Sdílej: