php-mysql中的问题

php-mysql中的问题,php,mysql,sql,Php,Mysql,Sql,我想从两个照片和视频表中获得不同的类别名称,它们的类别名称与类别表中的相同 在这里,我试图执行一个mysql查询,以从主类别表中获取不同的类别名称,这些名称同时出现在两个表中,甚至出现在一个表中,即照片和视频中 mysql查询: SELECT DISTINCT t1.category_name FROM categories t1, photos t2, videos t3 WHERE t1.category_name=t2.category OR t1.category_name=t3.cat

我想从两个照片和视频表中获得不同的类别名称,它们的类别名称与类别表中的相同

在这里,我试图执行一个mysql查询,以从主类别表中获取不同的类别名称,这些名称同时出现在两个表中,甚至出现在一个表中,即照片和视频中

mysql查询:

SELECT DISTINCT t1.category_name FROM categories t1, photos t2, videos t3 WHERE
t1.category_name=t2.category OR t1.category_name=t3.category AND t2.block=0 AND 
t3.block=0 ORDER BY t1.category_name asc
这是所有表的结构

类别::主表

照片::包含上述类别的照片

视频::包含上述类别的视频


请帮帮我…

如果我正确理解了这个问题,这就行了:

select distinct categories.name 
from categories 
left join photos on photos.category = categories.name
left join videos on videos.category = categories.name
where (photos.id IS NOT NULL) OR (videos.id IS NOT NULL);
但是你应该使用外键来连接类别和照片/视频。 我会使用EXISTS子句

将photos.category的数据类型更改为INT 当表格变大时,使用videos.category进行整型会快得多

SELECT  t1.category_name 
FROM categories t1,
JOIN photos p ON p.category = t1.id
JOIN videos v ON v.category = t1.id
GROUP BY t1.category_name
ORDER BY t1.category_name ASC

您需要将photos.category的数据类型更改为INT而不是varchar,并对videos.category执行相同的操作,然后尝试下面的查询

SELECT  Cat.category_name 
FROM categories As Cat,
JOIN photos AS P ON P.category = cat.id JOIN videos AS vid ON vid.category = Cat.id
GROUP BY Cat.category_name
ORDER BY Cat.category_name ASC

谢谢。

请记住,OR的优先级比AND@Phil当前位置我已在顶部添加了我的问题..您可能想将其作为一个问题来表达,这样就可以清楚地知道您在追求什么,什么不起作用
SELECT  Cat.category_name 
FROM categories As Cat,
JOIN photos AS P ON P.category = cat.id JOIN videos AS vid ON vid.category = Cat.id
GROUP BY Cat.category_name
ORDER BY Cat.category_name ASC