【问题标题】:SQL query, select from 2 tables randomSQL查询,从2个表中随机选择
【发布时间】:2011-01-07 15:36:27
【问题描述】:

大家好,我有一个问题,我不能像我一样工作..

我想显示新闻和评论(2 个表格),我希望有随机输出而不是相同的输出

这是我的问题,我真的希望有人能解释我做错了什么

SELECT
                anmeldelser.billed_sti ,
                anmeldelser.overskrift ,
                anmeldelser.indhold ,
                anmeldelser.id ,
                anmeldelser.godkendt
            FROM
                anmeldelser
            LIMIT 0,6
            UNION ALL
            SELECT
                nyheder.id ,
                nyheder.billed_sti ,
                nyheder.overskrift ,
                nyheder.indhold ,
                nyheder.godkendt
            FROM nyheder
            ORDER BY rand() LIMIT 0,6

【问题讨论】:

  • 请详细说明“我想要随机输出而不是相同的输出”,我不确定您要做什么。

标签: sql mysql random


【解决方案1】:

首先,两个 SELECT 语句的列顺序看起来与它们需要的 UNION 不匹配。

以下返回什么?

        SELECT
            anmeldelser.billed_sti ,
            anmeldelser.overskrift ,
            anmeldelser.indhold ,
            anmeldelser.id ,
            anmeldelser.godkendt
        FROM
            anmeldelser
        LIMIT 0,6
        UNION ALL
        SELECT
            nyheder.billed_sti ,
            nyheder.overskrift ,
            nyheder.indhold ,
            nyheder.id ,
            nyheder.godkendt
        FROM nyheder
        ORDER BY rand() LIMIT 0,6

(您使用的是哪个 RDBMS?您拥有的 SQL 对 Sybase 无效,但可能有一些技术取决于您使用的 SQL 的“风格”)

【讨论】:

  • 我正在使用 mysql,你可以在这里看到我得到了什么 tinyurl.com/37kzdtt 如果你刷新它们会显示一些随机的东西,但它们都是一样的
  • 哦,这是您的显示循环中的问题...您不会进入下一行
  • @klaus :完全正确-您不包含其余代码,但 $query 每次都是相同的...您必须在它们之间进行提取行或下一行-取决于你正在使用什么库。
  • @Hogan 我已经做了一个 foreach 并且它现在可以工作了:) 但是如果它来自新闻表或评论表,我怎么能 tjek?因为我不能让人们“阅读更多”,所以我需要确定我是否需要链接到新闻页面或评论页面:S
【解决方案2】:

由于 RAND() 仅出现在 ORDER BY 子句中,它是否不仅会为整个查询评估一次,而不是每行一次?

【讨论】:

  • 是的,这就是它只对整个查询生效的问题,我需要每行
【解决方案3】:

问题是第一个表没有选择随机元素

SELECT temp.* FROM
(
  SELECT
    anmeldelser.id ,
    anmeldelser.billed_sti ,
    anmeldelser.overskrift ,
    anmeldelser.indhold ,
    anmeldelser.godkendt,
    'News' as artType
  FROM anmeldelser
  UNION 
  SELECT
    nyheder.id ,
    nyheder.billed_sti ,
    nyheder.overskrift ,
    nyheder.indhold ,
    nyheder.godkendt,
    'Review' as artType
  FROM nyheder
 ) temp
 ORDER BY rand() LIMIT 0,6

【讨论】:

  • @klaus : 我忘了给子查询起别名,试试新版本。
猜你喜欢
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多