Ich habe benutzerdefinierte Tabelle, wo ich Zitate und Autor speichern
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); }
dann möchte ich eine Zeile mit Zitat und Autor anzeigen lassen.
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];
}
Was ist falsch? Was ist der effizienteste Weg, eine zufällige Zeile aus einer benutzerdefinierten Tabelle zu erhalten?
[Anmerkung: @ marwyk87 hat seine Antwort geschrieben, während ich dies verfasste, was eine andere Möglichkeit darstellt, das Problem zu beheben]
Sie haben einen einfachen Syntaxerrors in Ihrem SQL, weil Sie auf den Tabellennamen verweisen. Du solltest es einfach sagen
$sql = $wpdb->prepare( " SELECT * FROM {$wpdb->prefix}quotes ORDER BY RAND() LIMIT 1 ");
und
$sql = $wpdb->prepare( " SELECT * FROM {$wpdb->prefix}quotes WHERE ID = %d LIMIT 1 ", $id );
Ich denke, dass Sie ein Syntaxproblem in Ihrem TSQL haben könnten. Wenn du es tust
$table_name = $wpdb->prefix . 'quotes';
dann kannst du haben
$sql = $wpdb->prepare( " SELECT * FROM ".$table_name." ORDER BY RAND() LIMIT 1 ");