我有一个正在尝试创建的查询,但是当该查询处于活动状态时,页面加载需要花费很多时间...

我想做的是:

我有一个视频网站,当您单击视频时,您将被重定向到VIDEO页面,您可以在其中看到视频,并且url结构如下:

www.site.com/VIDEO_CATEGORY_NAME/VIDEO_ID.html

video_category和video_id在单独的表中。

我要实现的目标是:建立一个链接,以便在用户单击时将其重定向到RANDOM视频页面(随机视频)。

这是我要编写的查询:

$db = JFactory::getDBO();
$query = "SELECT distinct a.*,b.category FROM #__hdflv_upload a LEFT JOIN #__hdflv_category b on a.playlistid=b.id or a.playlistid=b.parent_id WHERE a.published='1' and b.published='1' and b.id=" . $videocategory1 . " and a.id != " .$videoid1 ." order by rand()";
$db->setQuery($query);
$result = $db->loadResult();


和链接:

<a href="/player/<?php echo $result; ?>.html">random video</a>


当查询在页面上时,将永远需要加载页面...
请有人帮我一下。谢谢

最佳答案

为了避免联接的ON子句中的OR,请尝试改用UNION。

SELECT a.*, b.category
FROM #__hdflv_upload a
INNER JOIN #__hdflv_category b
ON a.playlistid=b.id
WHERE a.published='1' AND b.published='1'
AND b.id=" . $videocategory1 . "
AND a.id != " .$videoid1 ."
UNION
SELECT a.*, b.category
FROM #__hdflv_upload a
INNER JOIN #__hdflv_category b
ON a.playlistid=b.parent_id
WHERE a.published='1' AND b.published='1'
AND b.id=" . $videocategory1 . "
AND a.id != " .$videoid1 ."
ORDER BY RAND()


UNION还会删除重复的记录,因此使DISTINCT不相关。

请注意,ORDER BY RAND()可能效率很低。有更有效的解决方案,但要提出建议,则需要更多地了解您的数据(例如,表声明,id字段是否连续等)。

07-24 09:47
查看更多