【问题标题】:problem in php mysqlphp mysql中的问题
【发布时间】:2011-07-01 14:34:33
【问题描述】:

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

在这里,我尝试执行一个 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

这是所有表格的结构...

类别::(主表)

照片::(包含以上类别的照片)

视频::(包含以上类别的视频)

请帮帮我...

【问题讨论】:

  • 请记住,OR 的优先级低于 AND
  • @Phil:我在顶部添加了我的问题..
  • 您可能想将其表述为一个问题,以便清楚您在什么不起作用

标签: php mysql sql


【解决方案1】:

我会使用EXISTS 子句

SELECT c.category_name
FROM categories c
WHERE EXISTS (
    SELECT 1 FROM photos p
    WHERE p.category = c.category_name
    UNION
    SELECT 1 FROM videos v
    WHERE v.category = c.category_name
)

【讨论】:

    【解决方案2】:

    如果我理解正确的问题,这将有效:

    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);
    

    但是您应该使用外键来连接类别和照片/视频。 http://dev.mysql.com/doc/refman/5.1/de/innodb-foreign-key-constraints.html

    【讨论】:

      【解决方案3】:

      photos.category的数据类型改为(INT) 和videos.category 到 (INT) 当表格变大时会更快

      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
      

      【讨论】:

        【解决方案4】:

        您需要将 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
        

        谢谢。

        【讨论】:

          猜你喜欢
          • 2011-06-15
          • 2016-01-29
          • 1970-01-01
          • 1970-01-01
          • 2010-10-26
          • 2010-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多