我在从2个不同的表中选择数据时遇到问题。 表1和表2都有字段' ID'和'类别'
我试图让所有' ID'类别' = 100001
我可以从Table1那样做:
$ids = @mysql_values('SELECT ID FROM Table1 WHERE Live = 1 AND Categories = 100001 ORDER BY Rand() LIMIT 20');
这很有效。
但是当我尝试使用我有限的知识进行联接时,它并不起作用。这是我加入的查询,但无法解决原因:
$ids = @mysql_values('SELECT Table1.ID, Table2.ID FROM Table1, Table2 WHERE Live = 1 AND Categories = 100001 ORDER BY Rand() LIMIT 20');
任何帮助表示赞赏。我看了其他的例子并尝试了但无济于事。
干杯
答案 0 :(得分:2)
这相当于CROSS JOIN
:
SELECT Table1.ID, Table2.ID
FROM Table1, Table2
WHERE Live = 1
AND Categories = 100001
ORDER BY Rand()
LIMIT 20
您可能想要JOIN
表:
SELECT *
FROM Table1 t1
JOIN Table2 t2
ON t1.<pk> = t2.<fk> -- you need to join both tables
WHERE Live = 1 -- add t1.Live/t2.Live dependent on table
AND Categories = 100001 -- same as above
ORDER BY Rand()
LIMIT 20
答案 1 :(得分:1)
看起来你走在正确的轨道上。
由于问题是这两个表都有categories
列,您可能希望得到类似下面的内容:
$ids = @mysql_values('SELECT Table1.ID, Table2.ID FROM Table1, Table2 WHERE Live = 1 AND 100001 IN (Table1.Categories, Table2.Categories) ORDER BY Rand() LIMIT 20');
请注意我如何将Categories = 100001
更改为100001 IN (Table1.Categories, Table2.Categories)
答案 2 :(得分:1)
我认为您正在寻找UNION
:
SELECT ID, Categories
FROM Table1
WHERE Live = 1 AND Categories = 100001
UNION
SELECT ID, Categories
FROM Table2
WHERE Live = 1 AND Categories = 100001
ORDER BY Rand()
LIMIT 20;
或者,如果您希望只有一次条件:
SELECT *
FROM (
SELECT ID, Categories
FROM Table1
UNION
SELECT ID, Categories
FROM Table2)
WHERE Live = 1 AND Categories = 100001
ORDER BY Rand()
LIMIT 20;