2014-04-01 46 views
0

我已經在這裏做過。 mySQL - how to show all records from the messages table, not just one只在對話中顯示一條消息

你好

這是我要如何建立一個通訊系統,使用戶1和用戶2有一個談話的地方。

這本身,我去的網站,所以所有的談話出現在頁面上。

問題在於它只能從數據庫中發出一條消息。因此,我希望它顯示來自數據庫的所有消息。

數據庫

CREATE TABLE IF NOT EXISTS `fms_opslagpm` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `fra_id` int(11) NOT NULL, 
    `til_id` int(11) NOT NULL, 
    `title` varchar(30) NOT NULL, 
    `besked` longtext NOT NULL, 
    `datotid` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 

INSERT INTO `fms_opslagpm` (`id`, `fra_id`, `til_id`, `title`, `besked`, `datotid`) VALUES 
(1, 2, 1, 'hrerherhe', 'hello world ', '2014-04-01 22:25:29'), 
(2, 2, 1, 'hrerherhe', 'hej', '2014-04-01 23:51:49'); 

的mysqli/PHP在這裏。

$sql = " 
       SELECT fms_bruger.fornavn, fms_bruger.efternavn, fms_opslagpm.id, fms_opslagpm.fra_id, fms_opslagpm.til_id, fms_opslagpm.title, fms_opslagpm.besked 
       FROM fms_bruger INNER JOIN fms_opslagpm ON fms_bruger.id=fms_opslagpm.fra_id 
       WHERE fms_opslagpm.id = ? and fms_opslagpm.fra_id = ? OR fms_opslagpm.til_id = ? 
       GROUP BY fms_opslagpm.title ORDER BY fms_opslagpm.datotid DESC 
       "; 
       if ($stmt = $this->mysqli->prepare($sql)) { 
        $stmt->bind_param('iii', $id, $fra_id, $til_id); 
        $id = $_GET["id"]; 
        $fra_id = $_SESSION["id"]; 
        $til_id = $_SESSION["id"]; 
        $stmt->execute(); 
        $stmt->store_result(); 
        $stmt->bind_result($fornavn, $efternavn, $id, $fra_id, $til_id, $title, $besked); 
        while ($stmt->fetch()) { 
        ?> 
        <tr class="postbox"> 
         <td class="beskedinfoBOX"> 
          <p> 
           <?php 
            echo $fornavn . " " . $efternavn; 
           ?> 
          </p> 
         </td> 
         <td> 
          <?php 
          //beskeden. 
          echo $besked; 
          ?> 
         </td> 
        </tr> 
        <?php 
        } 
        $stmt->close(); 
       } 
       else 
       { 
        echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error; 
       } 

enter image description here

這是怎麼當我寫fra_id = 2和til_id = 1,則表明它仍然只是頁面的內容。所以samtidigvæk頁面上的消息。

fms_opslagpm = fra_id - 是他/她是誰派消息

fms_opslagpm = til_id - 是他/她誰接收消息

+0

你將只能得到1返回行,因爲你有'WHERE fms_opslagpm.id =?'(所以只有1行id與匹配),你有'GROUP BY fms_opslagpm.title'(所以即使你有多行,他們會崩潰降至1)。你可以發佈 – Sean

回答

1

你的問題是,你只能選擇

WHERE fms_opslagpm.id = ? 

所以它只會返回1行,在id上有完全匹配。它看起來像你在哪裏試圖同時選擇具有相同title作爲該行與id

GROUP BY fms_opslagpm.title 

但即使你返回多個行,這將再次把調查結果分成1行的行。

你需要改變你的查詢以獲得該行WHERE fms_opslagpm.id = ?title,並使用OR選擇都具有相同的title其他行。

嘗試 -

SELECT 
    fms_bruger.fornavn, 
    fms_bruger.efternavn, 
    fms_opslagpm.id, 
    fms_opslagpm.title, 
    fms_opslagpm.besked 
FROM fms_bruger 
INNER JOIN fms_opslagpm ON fms_bruger.id=fms_opslagpm.fra_id 
WHERE (
     fms_opslagpm.id = ? 
     OR fms_opslagpm.title = (
           SELECT fms_opslagpm.title 
           FROM fms_opslagpm 
           WHERE fms_opslagpm.id = ? 
           ) 
     ) 
     AND 
     (
     fms_opslagpm.fra_id = ? 
     OR 
     fms_opslagpm.til_id = ? 
     ) 

ORDER BY fms_opslagpm.datotid DESC 

請參見本SQLFiddle例子 - http://sqlfiddle.com/#!2/36d534/6

您還需要包括1多參數去你bind_param

$stmt->bind_param('iiii', $id, $id1, $fra_id, $til_id); 
       $id = $_GET["id"]; 
       $id1 = $_GET["id"]; 
       $fra_id = $_SESSION["id"]; 
       $til_id = $_SESSION["id"]; 
+0

Yeaaa所以它的作品100%! – Jesperbook