sql使用LIKE子句:php

时间:2012-02-12 02:20:04

标签: php mysql foreach

我正在尝试生成用户正在参加的事件列表。我所要做的就是搜索列并使用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

3 个答案:

答案 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等)。