【问题标题】:Selecting similar videos except for current one using MySQL使用 MySQL 选择除当前视频之外的类似视频
【发布时间】:2017-05-14 18:27:41
【问题描述】:

我有一个包含视频信息的表格,当有人在我的网站上选择一个视频时,我有一个小部分显示具有类似标签的所有其他视频。现在,我想排除当前选择的视频。这是我的查询:

SELECT video_title, video_desc
FROM videos WHERE tags LIKE 
$CurrentTags AND   
'$CurrentVideo' NOT IN
(SELECT video_id FROM videos WHERE video_id = '$CurrentVideo')

查询工作正常(因为没有错误),但有时仍会返回已选择的视频。我认为这很明显,但我还是会澄清一下

$CurrentTags 是网站上当前选定视频的一组标签。

$CurrentVideo 是网站上当前所选视频的唯一视频 ID。

【问题讨论】:

    标签: mysql mariadb except


    【解决方案1】:

    这必须与没有子选择的查询相同:

    SELECT video_title, video_desc
    FROM videos 
    WHERE (
        tags LIKE $CurrentTags
    OR
        tags LIKE $otherTags
    OR
        tags LIKE $otherTags
    )
    AND   
        video_id <> '$CurrentVideo';
    

    【讨论】:

    • 仍然返回给我一个已经被选中的视频。真的没有意义。
    • 向我们展示带有参数的执行查询。只有在 $CurrentVideo 错误时才会出现错误
    • 我刚刚检查过,如果我将查询直接写入 CMD,那么它会正确排除和 $CurrentVideo。然后我在现场回显了 $currentVideo,它是 100% 正确的。我认为 $CurrentTags 一定有问题,因为在 CMD 中我只使用一个标签进行测试,而在网站上有多个标签。
    • 啊 - 把 () 放在你喜欢的地方:SELECT ... WHERE (你的喜欢) AND video_id '$CurrentVideo';
    • 在您的示例中只有一个喜欢!所以不存在这个问题
    【解决方案2】:

    (SELECT video_id FROM videos WHERE video_id = '$CurrentVideo')。该子查询返回与输入相同的输出。您已经有视频ID;您无需再次选择它。您是否尝试过那里的不等式运算符?此外,您正在将其与自身进行比较,不是吗?试试这个:

    video_id &lt;&gt;'$CurrentVideo'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多