新しいテーブル(wp_soundcloud
)を使ってプラグインを作成したので、その新しいテーブルから投稿データと共にデータを取得する必要があります。
これが私の質問です:
$querystr = "
SELECT $wpdb->posts.*,
FROM $wpdb->posts
LEFT JOIN $wpdb->soundcloud ON($wpdb->posts.ID = $wpdb->soundcloud.idpost)
WHERE $wpdb->posts.post_type = 'soundcloud'
AND $wpdb->posts.post_name = '$name'
";
$pageposts = $wpdb->get_results($querystr, OBJECT);
…そしてこれがデバッグです。
["last_query"]=>
string(176) "
SELECT wp_posts.*, .*
FROM wp_posts
LEFT JOIN ON(wp_posts.ID = .idpost)
WHERE wp_posts.post_type = 'soundcloud'
AND wp_posts.post_name = 'test-demo'
"
…そしてエラー:
["last_error"]=>
string(226) "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM wp_posts
LEFT JOIN ON(wp_posts.ID = .idpost)
WHERE wp_posts.post_' at line 2"
問題はLEFT JOIN ON(wp_posts.ID = .idpost)
です。しかし、クエリがテーブルをJOIN
にしなかったのはなぜですか?
注射にそれを開いたままにしないでください:
global $wpdb;
$all_posts = $wpdb->get_results( $wpdb->prepare(
"
SELECT %s.*
FROM %s
LEFT JOIN %s ON(%s = %s)
WHERE %s = 'soundcloud'
AND %s = '%s'
"
,$wpdb->posts
,$wpdb->posts
,"{$wpdb->prefix}soundcloud"
,$wpdb->posts.ID
,"{$wpdb->prefix}soundcloud.idpost"
,$wpdb->posts.post_type
,$wpdb->posts.post_name
,$name
), OBJECT );
echo '<pre>'.var_export( $all_posts, true ).'</pre>';
$wpdb;
は$wpdb->prefix
を提供します。これはあなたがwp-config.php
にテーブルの接頭辞として設定したものになります。それからあなたのテーブル名を追加してください:{$wpdb->prefix}{$your_table_name}
または"{$wpdb->prefix}soundcloud"
。
あなたの最初の問題はあなたが定義された$wpdb->soundcloud
変数を持っていなかったということです。
あなたの長期的な問題は、あなたが最初に別のテーブルを作成したということです。あなた自身のテーブルを作成するのに正当な理由はほとんどありません、そしてあなたの特定のJOINを考えると、おそらく代わりにpostmeta関数を使うべきでした。