我正在尝试用mySQL (和PHP)编写一个SELECT,它将检索“图像”表中的所有行,这些行还没有被某个用户排行。
这是我的桌子:
表:图片
+-----------+----------+-----------+----------+
| Index | Rank_Good| Rank_OK | Rank_Bad |
+-----------+----------+-----------+-----------
| 201 | 2 | 9 | 28 |
| 202 | 11 | 20 | 39 |
| 203 | 36 | 14 | 7 |
+-----------+----------+-----------+----------+WhoAlreadyClickedImg (没有索引)
+------------+-----------------+-----------+
| ImageIndex | UserWhoRankedIt | RankGiven |
+------------+-----------------+-----------+
| 202 | 87 | OK |
+------------+-----------------+-----------+
| 202 | 93 | Bad |
+------------+-----------------+-----------+
| 204 | 93 | Good |
+------------+-----------------+-----------+
| 203 | 94 | Bad |
+------------+-----------------+-----------+每当用户对图像进行排序时,就会更新表“image”,并将一行添加到"WhoAlreadyClickedImg“表中。(本表没有索引)
例如,如果用户将图像索引202与"ok“进行排序,那么col "Rank_OK”将被更新为(+1),然后将一个新行添加到"WhoAlreadyClickedImg“表中:
ImageIndex: 201 \ UserWhoRankedIt:(使用的会话id) = RankGiven: OK
我想要建立一个选择,将不会显示相同的图像两次给用户谁已经排名。
例如,如果我是用户"93",则select将带来的唯一图像是"203“
更新:
这是我使用的查询(by @eamonn):
从索引非IN的图像中选择*(从ImageIndex从WhoAlreadyClickedImg中选择UserWhoRankedIt = 93);
但我发现了一个错误:
您的SQL语法出现了错误;请检查与MySQL服务器版本相对应的手册,以获得使用“Index”附近的正确语法(在第1行中从WhoAlreadyClickedImg中选择ImageIndex WhoAlreadyClickedImg UserWhoRankedIt)。
我检查了我的系统:
也许有人有主意?
发布于 2017-06-02 13:09:26
在那里,这应该是可行的:
SELECT Images.Index
FROM Images
WHERE Images.Index NOT IN
(
SELECT WhoAlreadyClickedImg.ImageIndex
FROM WhoAlreadyClickedImg
WHERE WhoAlreadyClickedImg.UserWhoRankedIt = 93
);记住在列名之前添加表的名称。
发布于 2017-05-31 11:21:09
SELECT * FROM Images WHERE Index NOT IN (SELECT ImageIndex FROM WhoAlreadyClickedImg WHERE UserWhoRankedIt = 93);
简单子查询。
发布于 2017-06-01 09:52:53
好的,列名索引是MySQL中的保留关键字。应将索引列的名称更改为Id或MainIndex。请参阅此链接:https://dev.mysql.com/doc/refman/5.6/en/keywords.html
另一个选项是在select查询中使用表名。例如:
SELECT * FROM Images WHERE Images.Index NOT IN (SELECT ImageIndex FROM WhoAlreadyClickedImg WHERE UserWhoRankedIt = 93);我认为您应该重命名您的列,因为这样可以最大限度地减少SQL语句中出错的可能性。
https://stackoverflow.com/questions/44283361
复制相似问题