2012-02-12 58 views
0

我試圖生成用戶參加的事件列表。我所要做的就是搜索列並使用LIKE將用戶標識與存儲在每列中的名稱進行比較。使用LIKE子句的sql:php

現在我有兩個不同的事件存儲在我的數據庫中進行測試,每個事件都有一個唯一的eventID。我使用的登錄用戶正在參加這兩個事件,但它只顯示eventID1而不是eventID1和eventID2。

用戶名存儲在由「〜」分隔的名爲acceptedInvites的列中。所以現在它顯示用戶參加的「1〜2」。我可以使用%像%來拉這些事件嗎?

$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

+1

您應該*將數據庫架構規範化爲跨表的常見一對多關係或可能的多對多關係。這會使這個問題變得更容易。 – deceze 2012-02-12 02:23:22

回答

1

而不是使用foreach(),使用while()這樣的:

$myEvents = mysql_query("SELECT `eventID` FROM `events` WHERE `acceptedInvites` LIKE '".$userid."'"); 
while ($fetch = mysql_fetch_array($myEvents)) 
{ 
    echo $fetch['eventID']; 
} 

它會創建一個像foreach()但更簡單的循環...

附:當你進行MySQL查詢時,使用反引號[`]來確保該字符串不與MySQL函數(LIKE,SELECT等)混淆。

+0

哦,倒黴。你的意思是反引號? :P – Joe 2012-02-12 17:34:23

+0

@Joe是啊!抱歉!我在蒙特利爾,英語不是我的力量! – 2012-02-12 18:02:38

+1

這很好,你會找到一個不喜歡backtits的人:) – Joe 2012-02-12 18:06:40

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 
+0

我知道一些關於數據庫規範化的知識,我只是不確定用什麼命令來設置約束來修改現有的表。你能建議一個網站來閱讀這個嗎?感謝您的建議。 – user1104854 2012-02-12 05:45:38

2

我對你的描述有些困惑,但我認爲問題在於mysql_fetch_array只是一次返​​回一行,而你的代碼目前的設置方式似乎假設$fetch中充滿了數組所有的結果。您需要持續致電mysql_fetch_array才能實現。

而不是

$fetch = mysql_fetch_array($myEvents); 
foreach($fetch as $eventsAttending){ 
      echo $eventsAttending['eventID']; 
      } 

你可以有

while ($row = mysql_fetch_array($myEvents)) { 
    echo $row['eventID']; 
} 

這將通過表中的事件的各種行週期。