寻找某种 "lookahead iteration" 来对记录集进行分组
Looking for some kind of "lookahead iteration" for grouping record sets
与过去一样,如果您需要在网站上显示某些内容的列表,您必须使用一些循环结构来迭代数据。
在我的例子中,它是 table
的 <tr>
上的 foreach()
foreach($candidates as $candidate)
然后我得到值:
$candidate->id
问题是一个具体的值,就是执行。在我的数据库中,我有如下 table 中的数据,因此例如 candidates_id
= 600 有 enforcemement 1 和 0
id | candidates_id | enforcement
-------------------------------------
1 | 598 | 2
2 | 599 | 4
3 | 600 | 1
4 | 600 | 0
到目前为止一切正常,我从数据库中获取值并在现场回显。问题是像 0 或 1 这样的值对最终用户没有意义。所以我写 IF / ELSE 条件
if($candidate->enfor == 0)
echo "TEXT1";
elseif($candidate->enfor == 1)
echo "TEXT2";
else
echo "some default text";
示例数据中有两条记录 candidates_id=600 和不同的执行值。
现在脚本生成两个单独的 <tr>
元素。一个包含 <td>TEXT1</td>
,另一个包含 <td>TEXT2</td>
.
我正在寻找一种在相同的 html table 行和列中输出 <td>TEXT1,TEXT2</td>
的方法,因为 candidate_id=600 在数据库。
我尝试为此再做一个循环,但没有成功。
我什至不确定我的想法是否正确。
有人可以告诉我如何进行这项工作吗?
编辑:
我对数据库的查询是:
SELECT c.id, c.firstname, c.surname, c.email, c.process, c.search_work, c.note,c.registration_date,
MAX(CASE WHEN cl.language = 'angličtina' THEN cl.level ELSE '-' END)AS 'en',
MAX(CASE WHEN cl.language = 'němčina' THEN cl.level ELSE '-' END)AS 'ge',
group_concat(DISTINCT ce.enforcement) as enfor,
group_concat(DISTINCT cc.city) as city
FROM candidates AS c
LEFT JOIN candidates_languages AS cl ON c.id = cl.candidates_id
LEFT JOIN candidates_enforcement as ce on c.id = ce.candidates_id
LEFT JOIN candidates_city as cc on c.id = cc.candidates_id
GROUP BY c.id, c.firstname, c.surname, c.email DESC
情况是您查询中的 group_concat
将 return 0,1
用于 id=600
。你应该这样做:
foreach($candidates as $candidate){
// do your things ...
$enfor_array = explode(',', $candidate->enfor);
foreach($enfor_array as $enf) {
if($enf == 0)
echo "TEXT1";
elseif($enf == 1)
echo "TEXT2";
else
echo "some default text";
}
}
与过去一样,如果您需要在网站上显示某些内容的列表,您必须使用一些循环结构来迭代数据。
在我的例子中,它是 table
的<tr>
上的 foreach()
foreach($candidates as $candidate)
然后我得到值:
$candidate->id
问题是一个具体的值,就是执行。在我的数据库中,我有如下 table 中的数据,因此例如 candidates_id
= 600 有 enforcemement 1 和 0
id | candidates_id | enforcement
-------------------------------------
1 | 598 | 2
2 | 599 | 4
3 | 600 | 1
4 | 600 | 0
到目前为止一切正常,我从数据库中获取值并在现场回显。问题是像 0 或 1 这样的值对最终用户没有意义。所以我写 IF / ELSE 条件
if($candidate->enfor == 0)
echo "TEXT1";
elseif($candidate->enfor == 1)
echo "TEXT2";
else
echo "some default text";
示例数据中有两条记录 candidates_id=600 和不同的执行值。
现在脚本生成两个单独的 <tr>
元素。一个包含 <td>TEXT1</td>
,另一个包含 <td>TEXT2</td>
.
我正在寻找一种在相同的 html table 行和列中输出 <td>TEXT1,TEXT2</td>
的方法,因为 candidate_id=600 在数据库。
我尝试为此再做一个循环,但没有成功。
我什至不确定我的想法是否正确。
有人可以告诉我如何进行这项工作吗?
编辑: 我对数据库的查询是:
SELECT c.id, c.firstname, c.surname, c.email, c.process, c.search_work, c.note,c.registration_date,
MAX(CASE WHEN cl.language = 'angličtina' THEN cl.level ELSE '-' END)AS 'en',
MAX(CASE WHEN cl.language = 'němčina' THEN cl.level ELSE '-' END)AS 'ge',
group_concat(DISTINCT ce.enforcement) as enfor,
group_concat(DISTINCT cc.city) as city
FROM candidates AS c
LEFT JOIN candidates_languages AS cl ON c.id = cl.candidates_id
LEFT JOIN candidates_enforcement as ce on c.id = ce.candidates_id
LEFT JOIN candidates_city as cc on c.id = cc.candidates_id
GROUP BY c.id, c.firstname, c.surname, c.email DESC
情况是您查询中的 group_concat
将 return 0,1
用于 id=600
。你应该这样做:
foreach($candidates as $candidate){
// do your things ...
$enfor_array = explode(',', $candidate->enfor);
foreach($enfor_array as $enf) {
if($enf == 0)
echo "TEXT1";
elseif($enf == 1)
echo "TEXT2";
else
echo "some default text";
}
}