gpt4 book ai didi

php - 与循环结果比较时,mysql结果重复

转载 作者:行者123 更新时间:2023-11-29 13:53:01 26 4
gpt4 key购买 nike

我将用户选项存储在数据库中,以逗号分隔,并且我有用户从中选择这些选项的完整选项列表。我试图获取用户选择的选项,然后将其分开,在逗号后打破每个值,然后将其与完整选项进行比较,并使用复选框将用户选项从所有选项中选中。并保持其余选项不被选中。但问题是我的结果越来越重复。这是我的代码

function 

get_religion_pref($page,$user_id)

{
$getrow=mysql_query("select * from religion");
while($results=mysql_fetch_array($getrow))
{
$main_values=$results['religion'];
$query=mysql_query("select * from partner_prefrences where uid=$user_id");
$row=mysql_fetch_array($query);

$string =$row['religion'];
$string = preg_replace('/\.$/', '', $string); //Remove dot at end if exists

$array = explode(',', $string); //split string into array seperated by ', '
foreach($array as $value) //loop over values
{
?>
<li>
<label class="checkbox">
<input type="checkbox" value="<?php echo $main_values; ?>"
<?php if($main_values==$value){?> checked <?php } ?>><?php echo $main_values; ?>

</label>
</li>
<?php
}
}
}
?>

最佳答案

既然你在循环方面遇到了麻烦,为什么不在 MySQL 中完成整个事情而不是进行多个查询;

SELECT r.id, r.religion,IFNULL(p.uid,0) selected
FROM religion r
LEFT JOIN partner_preferences p
ON p.uid=1
AND CONCAT(',',p.religion,',')
LIKE CONCAT('%,',r.religion,',%');

An SQLfiddle to test with .

这将为每个宗教返回一行,使用LEFT JOIN来查看它是否在用户的宗教列表中列出。

真正应该做的是不要将逗号分隔的值存储在列中,而是将宗教列表分成单独的表。这将允许数据库对数据进行更有效的查询。上面的查询没有使用任何索引来进行字符串匹配,如果将来宗教数量增加,这可能会成为问题。

关于php - 与循环结果比较时,mysql结果重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16382225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com