wpdb - Get random row from custom table

I have custom table where I store quotes and author:function quote_install(){global $wpdb;global $quote_db_version;$t

I have custom table where I store quotes and author:

function quote_install(){
global $wpdb;
global $quote_db_version;
$table_name = $wpdb->prefix . 'quote'; 

// create sql your table             
$sql = "CREATE TABLE " . $table_name . " (
  ID int(11) NOT NULL AUTO_INCREMENT,
  time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,   
  quote text NOT NULL,
  author text NOT NULL,
  qtag ENUM('G', 'W', 'Z', 'H', 'M') NOT NULL default 'G',
  PRIMARY KEY  (ID)
);";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql); }

Then I want to get single row with quote and author to display.

function read_single_Quote( $id=NULL ) {
global $wpdb;

 $table_name = $wpdb->prefix . 'quotes';
// random select
 if($id ==NULL){
    $sql = $wpdb->prepare( "
        SELECT *
        FROM {$wpdb->prefix}'quotes'
        ORDER BY RAND()
        LIMIT 1
    ");
 } //get the row id = $id
else {
    $sql = $wpdb->prepare( "
    SELECT *
    FROM {$wpdb->prefix}'quotes'
    WHERE ID = %d
    LIMIT 1
    ", $id );
 }

$result = $wpdb->get_results( $sql );

// databse error, return false
if ( ! $result ) { return false; }

// return first result
return $result[0];

}

What is wrong? What is the most efficient way to get random row from custom table?

I have custom table where I store quotes and author:

function quote_install(){
global $wpdb;
global $quote_db_version;
$table_name = $wpdb->prefix . 'quote'; 

// create sql your table             
$sql = "CREATE TABLE " . $table_name . " (
  ID int(11) NOT NULL AUTO_INCREMENT,
  time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,   
  quote text NOT NULL,
  author text NOT NULL,
  qtag ENUM('G', 'W', 'Z', 'H', 'M') NOT NULL default 'G',
  PRIMARY KEY  (ID)
);";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql); }

Then I want to get single row with quote and author to display.

function read_single_Quote( $id=NULL ) {
global $wpdb;

 $table_name = $wpdb->prefix . 'quotes';
// random select
 if($id ==NULL){
    $sql = $wpdb->prepare( "
        SELECT *
        FROM {$wpdb->prefix}'quotes'
        ORDER BY RAND()
        LIMIT 1
    ");
 } //get the row id = $id
else {
    $sql = $wpdb->prepare( "
    SELECT *
    FROM {$wpdb->prefix}'quotes'
    WHERE ID = %d
    LIMIT 1
    ", $id );
 }

$result = $wpdb->get_results( $sql );

// databse error, return false
if ( ! $result ) { return false; }

// return first result
return $result[0];

}

What is wrong? What is the most efficient way to get random row from custom table?

Share Improve this question edited May 25, 2019 at 3:13 butlerblog 5,1313 gold badges28 silver badges44 bronze badges asked Mar 2, 2017 at 23:23 Greg SkalaGreg Skala 8110 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 2

[Note: @marwyk87 posted his answer while I was composing this, which represents another way to fix the problem]

You've got a simple syntax error in your SQL, because of the way you're referencing the table name. You should just say

$sql = $wpdb->prepare( "
    SELECT *
    FROM {$wpdb->prefix}quotes
    ORDER BY RAND()
    LIMIT 1
    ");

and

$sql = $wpdb->prepare( "
    SELECT *
    FROM {$wpdb->prefix}quotes
    WHERE ID = %d
    LIMIT 1
    ", $id );

I think you might have an syntax problem in your TSQL. If your doing

$table_name = $wpdb->prefix . 'quotes';

then you can have

$sql = $wpdb->prepare( "
    SELECT *
    FROM ".$table_name."
    ORDER BY RAND()
    LIMIT 1
");

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745466482a4628939.html

相关推荐

  • wpdb - Get random row from custom table

    I have custom table where I store quotes and author:function quote_install(){global $wpdb;global $quote_db_version;$t

    3小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信