我需要从两个不同的表中选择数据来为我的网站创建历史/存档,如下所示:
2012
我知道stackoverflow中存在类似的问题:PHP MYSQL Blog Archive Menu by Year and Month
但是,我有两个相似但不同的表。
我尝试过使用这个例子:mysql select data from two tables and different structure,但我总是得到错误“#1271 - 操作'非法混合操作'UNION'”
我可以通过其他任何方式来获取上述数据吗?
我的两个表的字段和结构是:
1)新闻
2)设备
注意:表格的ID是他们自己的文章ID。我的桌子没有任何共同之处。
答案 0 :(得分:2)
这是因为你试图将不同类型的联合在一起是不可能的。列数和类型应匹配,以便您可以联合其表。
日期& datetime - 你认为这些真的匹配吗?
好的,批评是真的:)现在的解决方案,我认为你需要像临时表这样的东西,以便你可以1.查询你的一个表,2.转换类型到任何匹配你的其他表,3。插入临时表。
现在你的临时表与你的表匹配。去和他们联盟。
答案 1 :(得分:2)
起初我认为数据类型是问题,您需要将类型转换为匹配:
SELECT id, title, content, cast(date_added as Date) FROM NEWS
UNION ALL
SELECT id, title, cast(content as text), date_added FROM EQUIPMENT;
然而,当我自己尝试时,我发现所有类型都是隐式转换的。我再看一下你的描述,深入研究整理问题。我相信content
表中的news
列与content
表中的Equipment
列的字符集不同和/或排序类型不同。这可能适用于标题列或整个表。你需要尝试转换。我建议这样做:
SELECT
id,
convert(title using utf8) collate utf8_bin,
convert(content using utf8) collate utf8_bin,
date_added
FROM
NEWS
UNION ALL
SELECT
id,
convert(title using utf8) collate utf8_bin,
convert(content using utf8) collate utf8_bin,
date_added
FROM
EQUIPMENT;
这应该可以解决你的问题。