我一直在寻找解决方案好几天了,我开始觉得自己像个白痴。
我有两张桌子。
entries link
+----------+-------+-----+ +----------+------+
| date | title | txt | | date | tag |
+==========+=======+=====+ +==========+======+
|2014-01-01| titl1 | txt1| |2014-01-01| tag1 |
|2014-01-02| titl2 | txt2| |2014-01-01| tag2 |
|2014-01-03| titl3 | txt3| |2014-01-01| tag3 |
|2014-01-04| titl4 | txt4| |2014-01-02| tag1 |
|2014-01-05| titl4 | txt4| |2014-01-02| tag2 |
|2014-01-06| titl4 | txt4| |2014-01-03| tag1 |
|2014-01-07| titl4 | txt4| |2014-01-04| tag2 |
|2014-01-08| titl4 | txt4| |2014-01-04| tag4 |
+----------+-------+-----+ +~~~~~~~~~~+~~~~~~+ 'link' continues
我希望*来自'条目',按'日期'排序,受4限制,以及所有对应'标记'来自每个条目的'link'。
'条目'中的'日期'是主键,如果这很重要的话。 'link'没有主键,因为'date'和'tag'都会重复。
在这里发帖是最后的手段,因为我一般不喜欢依靠帮助来完成任务,但我完全没有精神能力继续尝试。
我有这个查询,它抓取一个条目和相应的标记,并且限制为4,但它不会为每个条目获取/ all / tags。
SELECT date, title, txt
FROM entries
WHERE date IN (
SELECT date
FROM link
WHERE date = entries.date
)
LIMIT 4
如果我'反过来'并尝试,
SELECT date, tag
FROM link
WHERE date IN (
SELECT date
FROM entries
WHERE date = link.date
)
LIMIT 4
它限制了'link'四行。
我真的希望我已经解释了我想要的东西。如果我不清楚,我可以再试一次。
答案 0 :(得分:0)
不确定你究竟在问什么。 此查询返回前四个条目及其关联的标记
select a.date, a.title, a.txt , l.tag
from
(select date, title, txt
from entries
limit 4) a,
link l
where l.date = a.date
不确定mysql中的rownum(oracle)是什么,根据你的帖子猜测它的限制。
答案 1 :(得分:0)
以下查询将为您提供最多4个日期(按升序排列),并且所有关联的标记在tags
计算字段中连接成逗号分隔的字符串。当然没有显示WHERE
条件(我在你的问题中没有看到有意义的WHERE),所以我想你想要添加一个使这个有意义(即每次都不返回前4个日期)。还不清楚你想要使用什么样的顺序。在没有相关LIMIT
子句的情况下使用ORDER BY
通常是不好的形式,因为您可能会得到意想不到的结果。我根据日期假设了一个升序排序。
SELECT
e.`date` AS `date`,
e.title AS title,
e.txt AS txt,
GROUP_CONTAT(l.tag) AS tags
FROM entries AS e
LEFT JOIN link AS l
ON e.`date` = l.`date`
ORDER BY e.`date` ASC
WHERE ???
LIMIT 4
注意:如果您只想在INNER JOIN
中包含一些相关记录的LEFT JOIN
记录,请使用entries
代替link
。您还可以考虑使用保留字date
以外的字符串作为列名。
答案 2 :(得分:0)
我得到了我想要的东西,
SELECT *
FROM (
SELECT date AS date
FROM entries
ORDER BY date DESC
LIMIT 4
) AS ent, link
WHERE ent.date = link.date
这为我提供了条目及其所有标签,并限制了四个条目,而没有关闭标签。
它输出类似于:
的模式2014-01-04 tag4
2014-01-04 tag2
2014-01-03 tag1
2014-01-02 tag2
2014-01-02 tag1
2014-01-01 tag3
2014-01-01 tag2
2014-01-01 tag1
这就是我想要的。
我花了几个小时才冷静下来,然后离开代码,有时候,这就是你所需要的。