obter uma linha aleatória da tabela personalizada

Eu tenho uma tabela personalizada onde eu armazeno citações e autor

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); } 

então eu quero obter uma única linha com citações e autor para exibição.

 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]; 

}

o que está errado? Qual é a maneira mais eficiente de obter uma linha aleatória da tabela personalizada?

Solutions Collecting From Web of "obter uma linha aleatória da tabela personalizada"

[Nota: @ marwyk87 postou sua resposta enquanto eu estava compondo isso, o que representa outra maneira de corrigir o problema]

Você obteve um erro de syntax simples em seu SQL, por causa da maneira como você está referenciando o nome da tabela. Você deveria simplesmente dizer

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

e

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

Eu acho que você pode ter um problema de syntax no seu TSQL. Se você estiver fazendo

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

então você pode ter

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