我正在尝试生成用户正在参加的事件列表。我所要做的就是搜索列并使用LIKE将userid与存储在每列中的名称进行比较。
现在我在我的数据库中存储了两个不同的事件用于测试,每个事件都有一个唯一的eventID。我登录的用户ID正在参加这两个事件,但它只显示eventID1两次而不是eventID1和eventID2。
用户名存储在名为acceptedInvites的列中,以“〜”分隔。所以现在它显示了用户ID参加的“1~2”。我可以使用%like%来拉动这些事件吗?
$userid = $_SESSION['userid'];
echo "<h2>My Events</h2>";
$myEvents = mysql_query("select eventID from events where acceptedInvites LIKE '%$userid%' ");
$fetch = mysql_fetch_array($myEvents);
foreach($fetch as $eventsAttending){
echo $eventsAttending['eventID'];
}
我的输出只有11,应该是12
答案 0 :(得分:3)
将您的桌面设置更改为多对多设置(许多用户可以参加一个活动,一个用户可以参加许多活动):
users
- id (pk, ai)
- name
- embarrassing_personal_habits
events
- id (pk, ai)
- location
- start_time
users_to_events
- user_id ]-|
|- Joint pk
- event id ]-|
现在你只使用连接:
SELECT u.*
FROM users u
JOIN users_to_events u2e
ON u.id = u2e.id
JOIN events e
ON u2e.event_id = e.id
WHERE u.id = 11
答案 1 :(得分:2)
我对您的描述感到有点困惑,但我认为问题是mysql_fetch_array
一次只返回一行,而您的代码目前设置方式似乎假设{{1}填充了所有结果的数组。你需要不断调用$fetch
来实现这一目标。
而不是
mysql_fetch_array
你可以
$fetch = mysql_fetch_array($myEvents);
foreach($fetch as $eventsAttending){
echo $eventsAttending['eventID'];
}
这将循环显示表中的各行事件。
答案 2 :(得分:1)
不要使用foreach()
,而是像这样使用while()
:
$myEvents = mysql_query("SELECT `eventID` FROM `events` WHERE `acceptedInvites` LIKE '".$userid."'");
while ($fetch = mysql_fetch_array($myEvents))
{
echo $fetch['eventID'];
}
它会创建一个像foreach()
这样的循环,但更简单......
P.S。当你进行MySQL查询时,使用反引号[`]来确保字符串不与MySQL函数混淆(LIKE,SELECT等)。