0
我有一個基本的php聊天室。每個「房間」都有自己的桌子。在每個房間表內,都會發布單個消息,每條消息一行。列如下:PHP MYSQL:如何顯示基於忽略列表的聊天室消息
id, sender, message
在一個單獨的表稱爲ignore_lists
,用戶在聊天的命令將用戶添加到他們的忽略列表悄悄話目的。這很好,我有這個部分完全工作。
但是,今天我決定讓它也阻止他們在他們忽略列表中的人的「主屏幕」公共聊天中看到消息。
我已經嘗試過,但沒有做各種各樣的時髦的東西,但不能得到它的工作。
下面是顯示我的聊天消息的功能:
function showroom($room, $len, $link){
$query3 = "SELECT * FROM(SELECT `message`, `id`, `sender` FROM `$room` ORDER BY `id` DESC LIMIT $len) AS `id` ORDER BY `id` ASC";
$result3 = mysqli_query($link, $query3); // execute the query
if (mysqli_num_rows($result3) > 0) {
while($row = mysqli_fetch_assoc($result3)) {
$showmsg = htmlspecialchars_decode($row["message"]);
echo "$showmsg<br>";
}}}
如何使用忽略列表表以某種方式從功能上拉的消息以上,但不包括誰出現在忽略任何數量的人清單?
作進一步的參考..忽略列表表只是一個所有用戶的大表。每次用戶添加某人自己的忽略列表,它插入行與列ignore_list表:
id, person_being_ignored, name_of_ignore_list_owner
我做了這樣的聲明,但沒有奏效。或者說,我應該說它確實有效,但只有在忽略列表中只有一個人時纔有效。
query = "SELECT * FROM `ignore_lists` WHERE `ignore_owner`='$id' ORDER BY `person_being_ignored` ASC";
$result = mysqli_query($link, $query); // execute the query
if (mysqli_num_rows($result) > 0) {
while($mrow = mysqli_fetch_array($result)) {
$ignoree_name = $mrow['name_of_ignored'];
$query3 = "SELECT * FROM `$room` WHERE sender <> '$ignoree_name'";
// $query3 = "SELECT * FROM(SELECT `message`, `id`, `timestamp`, `color` FROM `$room` WHERE sender <> '$ignoree_name' ORDER BY `id` DESC LIMIT $len) AS `id` ORDER BY `id` ASC";
$result3 = mysqli_query($link, $query3); // execute the query
}
while($row = mysqli_fetch_array($result3)) {
$showmsg = htmlspecialchars_decode($row["message"]);
echo "$showmsg<br>";
}
} elseif(mysqli_num_rows($result) < 1) {
$query3 = "SELECT * FROM(SELECT `message`, `id`, `timestamp`, `color` FROM `$room` ORDER BY `id` DESC LIMIT $len) AS `id` ORDER BY `id` ASC";
$result3 = mysqli_query($link, $query3); // execute the query
if (mysqli_num_rows($result3) > 0) {
while($row = mysqli_fetch_assoc($result3)) {
$showmsg = htmlspecialchars_decode($row["message"]);
echo "$showmsg<br>";
}}}}
謝謝。這將是幾個小時才能回家,並試試這個。但只要我嘗試它,我會讓你知道。我不知道我可以在mysql語句中使用數組。 – cjackson
它不是一個數組,我使用implode來連接數組元素並將結果作爲字符串返回,以便在MySQL語句中使用它。更多在這裏[php implode](http://php.net/implode) – user1422758
這半工作。我不得不修改它。它不會在查詢中使用($ where)返回有效的mysql結果。我必須這樣做 '$ query3 =「SELECT * FROM(SELECT message,id,timestamp,color FROM $ room WHERE sender NOT IN('」。implode($ ignoree_name,'','「)。」 ')ORDER BY ID DESC LIMIT 99)AS ID ORDER BY id ASC「;' 以防萬一你想編輯你的答案 – cjackson