4 つの列 (meta_id、post_id、meta_key、meta_value) を含むテーブル (wp_postmeta) があります。meta_key には、neighborhood_value というフィールドが含まれており、neighborhood_value の値は、meta_value 列に格納されます。テーブルから neighbor_value の内容を取得し、それらを変数として使用するにはどうすればよいですか? どんなサポートでも大歓迎です
5 に答える
わかりました、すべてがメタなので、コードも「メタ」になります:)
更新-DBへの接続に何を使用するかがわかったら、回答をより具体的に変更できます。
global $wpdb;
$sql = "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=XXX";
$retMeta = array();
$results = $wpdb->get_results($sql);
foreach ($results as $resultRow)
{
if (!isset($retMeta[$resultRow['meta_key']]))
{
$retMeta[$resultRow['meta_key']] = array();
}
$retMeta[$resultRow['meta_key']][] = $resultRow['meta_value'];
}
結果の$retMetaは2次元配列になり、$ retMeta ['neighbourhood_value'] [0]を使用して近隣の値にアクセスできるようになります(もちろん、最初にこれが設定されているかどうかを確認する必要があります- isset($retMeta['neighbourhood_value'])
)。
UPDATE2
データをインポートするスクリプトの場合、次のようになります。
$sql = "SELECT meta_key, meta_value FROM wp_postmeta WHERE post_id=XXX";
$retMeta = array();
$result = mysql_query($sql);
while ($resultRow= mysql_fetch_assoc($result))
{
if (!isset($retMeta[$resultRow['meta_key']]))
{
$retMeta[$resultRow['meta_key']] = array();
}
$retMeta[$resultRow['meta_key']][] = $resultRow['meta_value'];
}
mysql_free_result($result);
ただし、移植性を維持するために、とにかくWP_Queryを使用する必要があります(wp_postmetaはそのように名前を付ける必要はなく、wp2_postmetaなどにすることができます)。
loop.phpなどのWordpressテンプレートファイルを使用している場合は、便利なget_post_meta()関数を使用するだけです。
私の理解が正しければ、meta_value からキーのリストを取得しますか?
私は php でこれを行います: (この構造をサポートするある種のフレームワークを使用していると仮定します。この例は codeigniter フレームワークで動作します))
$sql = "SELECT distinct meta_value FROM wp_postmeta"
$result = $db->query($sql)
foreach ($result->reult() as $row) {
$mydata[] = $row->meta_value;
}
$mydata は、すべての meta_value 値を含む配列になりました。
私は以下と同じことをしていました。
<?php foreach($values as $value)
{
$myVarname[$value[valuefield]]=$value[valuefield];
}
$myVarname[field1]="Cow";
$myVarname[field2]="dog";
?>
変数に使用する言語は指定しませんが、MySQL で SQL を使用する場合は、「MySQL テーブルから値を取得して変数に保存する」方法を次に示します。
select @var_name := column_name from table_name where other_column = 5;
これは選択を行い、副作用としてユーザー変数 @var_name の値を column_name の値に割り当てます。
また
select @var_name := count(*) from other_table where other_column > 5;
@var_name を条件に一致したレコード数に設定します。