Php 在SQLite中没有返回数据时选择随机数据
我正在为我的一个应用程序使用SQLite我有一个条件,我首先运行一个查询,如果它返回结果,那么我将检索它的数据,但是如果第一个查询没有返回任何内容,我想运行另一个查询,它将从数据库中选择任意随机行并返回结果 我设计了下面的代码,如果它与第一种情况下的数据匹配,那么它就可以正常工作,但对于第二种情况,它就不起作用了Php 在SQLite中没有返回数据时选择随机数据,php,sql,sqlite,Php,Sql,Sqlite,我正在为我的一个应用程序使用SQLite我有一个条件,我首先运行一个查询,如果它返回结果,那么我将检索它的数据,但是如果第一个查询没有返回任何内容,我想运行另一个查询,它将从数据库中选择任意随机行并返回结果 我设计了下面的代码,如果它与第一种情况下的数据匹配,那么它就可以正常工作,但对于第二种情况,它就不起作用了 $sql_query = "SELECT (select count(*)) as count,* FROM item WHERE combo LIKE '%" . $ans_comb
$sql_query = "SELECT (select count(*)) as count,* FROM item WHERE combo LIKE '%" . $ans_combo . "%' LIMIT 1;";
$sql_query_bu = "SELECT * FROM item ORDER BY RANDOM() LIMIT 1;";
ini_set('display_errors', true);
error_reporting(E_ALL);
try {
$dbh = new PDO("sqlite:src/appdb.s3db");
$dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh -> setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $dbh -> prepare($sql_query);
$stmt -> execute();
foreach ($stmt as $row) {
if ($row['count'] != '1') {
echo $sql_query_bu . "<br/>";
$stmt = $dbh -> prepare($sql_query_bu);
$stmt -> execute();
foreach ($stmt as $row) {
echo $row['name'], " ", $row['name'], " ", $row['name'], "\n";
}
}
echo "Count: " . $row['count'];
echo $row['name'], " ", $row['name'], " ", $row['name'], "\n";
}
} catch(Exception $ex) {
var_dump($ex);
}
unset($dbh);
unset($stmt);
请引导我通过这个
谢谢。如果没有与WHERE子句匹配的记录,则第一次调用fetch将返回FALSE。在这种情况下,您只需通过随机*查询发送订单并获取第一条记录 独立示例:
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);
$stmt = $pdo->prepare('SELECT * FROM soFoo WHERE combo=? LIMIT 1');
$stmt->execute( array('comboF') ) ;
$row = $stmt->fetch();
$stmt = null;
if ( !$row ) {
$row = $pdo->query('SELECT * FROM soFoo ORDER BY RANDOM() LIMIT 1')->fetch();
}
var_dump($row);
function setup($pdo) {
$pdo->exec('
CREATE TABLE soFoo (
combo TEXT,
x TEXT
)
');
$stmt = $pdo->prepare('INSERT INTO soFoo (combo,x) VALUES (?,?)');
$stmt->execute( array('comboA','A') );
$stmt->execute( array('comboB','B') );
$stmt->execute( array('comboC','C') );
$stmt->execute( array('comboD','D') );
}
*例如,在MySQL中,随机订购的成本相当高。我怀疑SQLite对于这种情况是否有特殊的例程。更好地为ORDER BY RANDOM(随机排序)搜索一个好的替代方案现在已经奏效了,而thnx for the Advice我肯定会寻找一些更好的替代方案。谢谢