如何在mysql select语句中使用php变量(数组)?
我正在设计一个拍卖网站,目前正在开设一个网页,让人们可以查看商品当前所有出价的列表。我想显示3列:
amountbid - 每个投标人为该项目出价的金额(以tblbid持有)
bidderid - 已竞标的每个竞标者的ID(在tbluser中找到)
total_positivity_feedback - 有多少用户为竞价者留下了正面反馈(根据tblfeedback计算)
要查找'amount'和'bidderid'列,我会从上一页传递essayid网址参数。这很好用。
尽管如此,我无法显示每次出价的各种用户的total_positivity_feedback列。
我的mysql查询如下所示:
select
tblbid.bidderid,
tblbid.amount,
(select count(tblfeedback.feedbackid) from tblfeedback WHERE tblfeedback.writerid = "ARRAY VARIABLE GOES HERE") AS total_positivity_feedback FROM tblbid WHERE tblbid.essayid = $essayid_bids
我认为实现这一目标的唯一方法是使变量包含那些竞标特定文章的人的bidderid?我似乎无法弄清楚如何做到这一点?!?
非常感谢你的帮助
答案 0 :(得分:2)
我认为你不能使用这样的数组。您必须使用 IN Clause 。
所以你必须构建一个你的值列表,比如说
SELECT *
FROM yourTable
WHERE yourID IN (1,2,3,4,5,6)
答案 1 :(得分:2)
正如astander所建议的那样,您似乎可以从MySQL的IN子句中受益。 生成(1,2,3,4,5,6)字符串的快速方法是使用php函数implode()。
例如:
$array = array(1,2,3,4,5);
$in = '(' . implode(',', $array) . ')';
echo $in;
的产率:
(1,2,3,4,5)
所以..
$array = array(1,2,3,4,5);
$in = '(' . implode(',', $array) . ')';
$query = sprintf('select tblbid.bidderid, tblbid.amount, (select count(tblfeedback.feedbackid) from tblfeedback WHERE tblfeedback.writerid IN %s AS total_positivity_feedback FROM tblbid WHERE tblbid.essayid = %s', $in, $essayid_bids);
答案 2 :(得分:-1)
从你的问题来看,作家身份证应该来自何处并不明显。当你说“数组”时,你的意思是PHP数组还是你引用存储在数据库中的行中的多个值?你的描述暗示前者,因为你在数据库结构中没有提到作家,但我怀疑你的意思是后者。
数组中的值可以非常简单地插入到PHP字符串中:
$arr = array("String");
echo "{$arr[0]}";
正如我之前提到的,我怀疑这不会解决你的问题。你能否澄清一下投标与作家之间的关系?如果您想要获得每个竞标者的反馈,那么您将需要以下内容:
SELECT
tblbid.bidderid,
tblbid.amount,
(SELECT COUNT(tblfeedback.feedbackid) from tblfeedback WHERE tblfeedback.writerid = tblbid.bidderid) AS total_positivity_feedback
FROM tblbid WHERE tblbid.essayid = $essayid_bids;
否则请进一步解释。