Po AlmaLinuxu byl v nové stabilní verzi 10.1 vydán také Rocky Linux. Přehled novinek v poznámkách k vydání.
Open source reimplementace počítačových her Tomb Raider I a Tomb Raider II spolu s dalšími vylepšeními a opravami chyb TRX byla vydána ve verzi 1.0. Jedná se o sloučení projektů / enginů TR1X a TR2X do jednoho TRX. Videoukázka na YouTube.
Společnost Seznam.cz spouští konverzační nástroj založený na umělé inteligenci Seznam Asistent. Asistent využívá vlastní jazykový model SeLLMa a dočasně i komerční modely od OpenAI provozované v evropských datacentrech prostřednictvím Microsoft Azure. Dlouhodobým cílem Seznamu je provozovat Asistenta výhradně na interních jazykových modelech a ve vlastních datových centrech.
Software LibrePods osvobozuje bezdrátová sluchátka AirPods z ekosystému Applu. Exkluzivní funkce AirPods umožňuje využívat na Androidu a Linuxu. Díky zdokumentování proprietárního protokolu AAP (Apple Accessory Protocol).
Byl vydán AlmaLinux OS 10.1 s kódovým názvem Heliotrope Lion. S podporou Btrfs. Podrobnosti v poznámkách k vydání.
Placená služba prohledávání zprostředkovatelů dat a automatického odstraňování uniklých osobních údajů Mozilla Monitor Plus bude 17. prosince ukončena. Bezplatná monitorovací služba Mozilla Monitor bude i nadále poskytovat okamžitá upozornění a podrobné pokyny k omezení rizik úniku dat. Služba Mozilla Monitor Plus byla představena v únoru loňského roku.
Waydroid (Wikipedie, GitHub) byl vydán v nové verzi 1.6.0. Waydroid umožňuje spouštět aplikace pro Android na běžných linuxových distribucích. Běhové prostředí vychází z LineageOS.
Příspěvek na blogu Raspberry Pi představuje novou kompletně přepracovanou verzi 2.0 aplikace Raspberry Pi Imager (YouTube) pro stažení, nakonfigurování a zapsání obrazu operačního systému pro Raspberry Pi na SD kartu. Z novinek lze vypíchnout volitelnou konfiguraci Raspberry Pi Connect.
Memtest86+ (Wikipedie), svobodný nástroj pro kontrolu operační paměti, byl vydán ve verzi 8.00. Přináší podporu nejnovějších procesorů Intel a AMD nebo také tmavý režim.
Programovací jazyk Racket (Wikipedie), tj. jazyk z rodiny jazyků Lisp a potomek jazyka Scheme, byl vydán v nové major verzi 9.0. Hlavní novinku jsou paralelní vlákna (Parallel Threads).
$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: