2014-06-08 62 views
2

我在我的mysql表中創建了這3列,這樣我就可以獲得每個用戶事務的列表。從mysql列中檢索並回顯多個值

ticket_date, ticket_num, ticket_result 

我還創建了一個函數來在這些列中回顯值並且它已成功運行。

function.php:

$sql = "SELECT * 
     FROM members 
     WHERE user_id = '{$_SESSION['user_id']}'"; 
      $query = $this->db_connection->query($sql); 

      while ($row = $query->fetch_object()) { 
      global $me, $me2, $date; 
      $me = $row->ticket_num; 
      $me2 = $row->ticket_result; 
      $date = $row->ticket_date; 
      } 

transactions.php

<table class="table"> 
<thead> 
<th>Date</th> 
<th>Ticket ID</th> 
<th>Result</th> 
</thead> 
<tr> 
<td><?php echo $date; ?> </td> 
<td><?php echo $me; ?> </td> 
<td><?php echo $me2; ?> </td> 
</tr> 
</table> 

我現在的問題是,如果用戶有一個以上的交易我將如何能夠從一個特定的一唱一和值列分開。我正試圖將每個事務回顯爲一個。 我能將每個值存儲爲一個數組,所以我可以這樣稱呼它嗎?

$row->ticket_num['0'] 

編輯:我的意思是問我如何可以存儲數據到各自的列。比如存儲適用於每個事務的多個$ ticket_date。我是否可以將數據作爲數組存儲到列中,以便使用數組指針調用每個事務?

+0

那些是呼應在while循環中? –

+0

號while循環處於函數中,並且回顯位於單獨的文件中。 – user3718799

+0

你可以嘗試一下,然後看看你是否遇到錯誤? –

回答

1

我認爲最好的辦法,將不使用全局變量對於這一點,除非有任何理由你的函數不能返回這個數據,即它返回的是其他的東西。你可能有這樣的事情在你的function.php:

$sql = "SELECT * 
     FROM members 
     WHERE user_id = '{$_SESSION['user_id']}'"; 
      $query = $this->db_connection->query($sql); 
      $return = array(); 

      while ($row = $query->fetch_object()) { 
      array_push($return, array($row->ticket_num, $row->ticket_result, $row->ticket_date)); 
      } 
     return $return 

然後你就可以在你的transactions.php做到這一點:

<table class="table"> 
<thead> 
<th>Date</th> 
<th>Ticket ID</th> 
<th>Result</th> 
</thead> 
<?php 
$ticket = Whatever_Function(); 
foreach($ticket as $t){ 
echo"<tr> <td> ".$t[0]." </td><td>".$t[1]."</td><td>".$t[2]."</td></tr>"; 
} 
?> 
</table> 

編輯

關於在您的其他問題評論,應該建立這樣的數據庫結構:

DB Structure

通過這樣做,你將它分開,以便每張桌子屬於一件事或一件事。這些可再使用SQL加入這樣可以彼此相關:

SELECT * FROM Transactions tr 
JOIN Users u ON u.UID = tr.UID 
JOIN Tickets ti ON ti.TID = tr.TID 

通過看上面的SQL代碼段,你應該能夠看到它是如何在不同的表中的列相匹配。這將創建一個大型虛擬表,然後您可以搜索其中的東西,其列名前加上它們的假名。

所以,如果你想獲得大家的是,買了其價格超過£20票的電子郵件地址,即使你需要的表不直接相連,你可以這樣做:

SELECT u.email FROM Transactions tr 
JOIN Users u ON u.UID = tr.UID 
JOIN Tickets ti ON ti.TID = tr.TID 
WHERE ti.Price > 20 
+0

謝謝,這是我可以返回價值的更好方式。我忘了問我的問題,我將如何能夠將每個事務存儲在mysql列中?例如,如果我有多個ticket ID,我將如何存儲以便我可以像這樣調用$ t ['0']或$ t ['1']。有沒有一種方法可以將數據作爲數組存儲到數據庫中? – user3718799

+0

@ user3718799我會建議不要將數組數據存儲到數據庫中。如果你需要搜索它,它會變成一個巨大的痛苦!我會創建一個新表,將所有交易存儲爲單獨的行。然後,您可以通過選擇所有與票證ID相關的交易來獲取特定票證的所有交易。無論如何,我今天要去參加一個節日,所以我可能無法在明天之前提供任何幫助! –

+0

如果我爲票據信息創建了一個新行,那麼將該票證ID鏈接到進行交易的用戶的最佳方式是什麼。 – user3718799

0

做這樣的事情:

global $me, $me2, $date; 
while ($row = $query->fetch_object()) { 
    $me[] = $row->ticket_num; 
    $me2[] = $row->ticket_result; 
    $date[] = $row->ticket_date; 
} 

transactions.php

<table class="table"> 
<thead> 
<th>Date</th> 
<th>Ticket ID</th> 
<th>Result</th> 
</thead> 
<?php foreach($me as $k => $m){ 
    echo "<tr>"; 
    echo "<td>".$date[$k]."</td>"; 
    echo "<td>".$m."</td>"; 
    echo "<td>".$me2[$k]."</td>"; 
    echo "</tr>"; 
?> 
</table>