在我的wordpress博客中,我有一个由用户和他们的产品组成的表格,由“;”分隔例如:
mytable
----------------------
userid | products
----------------------
1 | camera
2 | books;keyboard;computer
3 | mouse;printer
4 | scanner
现在在我的脚本中,用户将添加一个新产品,所以我需要检查该用户是否有超过3个产品,因为在这种情况下我将什么都不做,不会为他添加此产品,但如果他少于3产品我需要将新产品添加到他的产品中,并以“;”分隔类似的东西:
$userid = 3;
$newproduct = "ball"
if (pruduct field for that user has more than 2 ";" ) {
do nothing
}else{
$wpdb->update(
'mytable',
array( 'product' => concat(product, ";", $newproduct)),
array( 'userid ' => $userid ),
array( '%s' ),
array( '%d' )
);
所以这个例子的结果是:
mytable
----------------------
userid | products
----------------------
1 | camera
2 | books;keyboard;computer
3 | mouse;printer;ball
4 | scanner
答案 0 :(得分:1)
尽管有数据规范化参数,非常有效,如果由于某种原因你无法纠正它并且必须使用现有的。
选择products
列作为字符串,并使用PHP explode()
和implode()
函数。你最终会得到这样的东西:
$current_products = explode(';', $user['products']);
// $current_products is now an array of the user's products.
if !(count($current_products) >= 3) {
$current_products[] = $new_product;
}
$user_products = implode(';', $current_products);
// Insert $user_products into your table via UPDATE
implode
和explode
函数根据给定的分隔符将字符串转换为数组。
答案 1 :(得分:0)
在WordPress中,正确的方法是使用user_meta
表。尊重,你建议的方式不是一个好方法。
您可以使用以下代码将这些值设置到user_meta表中。
$meta_key = '_my_products'; /* be sure to choose a unique key prefix */
add_user_meta( $userid, $meta_key, 'football', false );
add_user_meta( $userid, $meta_key, 'basketball', false );
您可以使用此类代码取回它们
$vals = get_user_meta( $userid, $meta_key, false );
foreach ($vals as $value) {
echo $i;
}
还有其他功能可用于更新和删除user_meta项目。他们运作良好。读这个。 https://codex.wordpress.org/Function_Reference/get_user_meta