组合2选择合二为一

时间:2016-02-26 14:44:22

标签: php mysql

我在mysql中有一个完美的查询。

        $result =mysql_query("
            SELECT a.IDN, c.Name_F, c.Name_L, d.Url_photo, 
                    ( SELECT COUNT(*)
                        FROM Messages AS e
                        WHERE   e.IDN = a.IDN               
                    ) AS mes_new ,
                    ( SELECT LEFT(s.Messages,25)
                        FROM Messages AS s
                        WHERE s.Time= (SELECT MAX(k.Time)
                        FROM Messages AS k
                        WHERE k.IDN = a.IDN)

                    ) AS latest 
            FROM offers AS a 
                    LEFT JOIN info AS c
                ON a.IDN = c.IDN
                    LEFT OUTER JOIN photos AS d
                ON c.IDN = d.IDN AND d.Flag_av='1'

            Where a.IDN_with='$IDN' AND a.Status='2'    
        ");

但我还有一个IDN,还需要制作一个类似的另一个选择。这样的事情:

            $result =mysql_query("
            SELECT a.IDN, c.Name_F, c.Name_L, d.Url_photo, 
                    ( SELECT COUNT(*)
                        FROM Messages AS e
                        WHERE   e.IDN = a.IDN               
                    ) AS mes_new ,
                    ( SELECT LEFT(s.Messages,25)
                        FROM Messages AS s
                        WHERE s.Time= (SELECT MAX(k.Time)
                        FROM Messages AS k
                        WHERE k.IDN = a.IDN)

                    ) AS latest 
            FROM users AS a 
                    LEFT JOIN info AS c
                ON a.IDN = c.IDN
                    LEFT OUTER JOIN photos AS d
                ON c.IDN = d.IDN AND d.Flag_av='1'

            Where  a.IDN='$active'  
        ");

因此,您可以看到仅更改表(从商品到用户)和条件(在哪里),但是可以在一个选择中进行更改吗?作为双重选择,我想到UNION,因为如果IDN将在两个表中,该行可以重复,我不需要它。但我想再次选择一个。有可能吗?

1 个答案:

答案 0 :(得分:1)

我自己想通了,因为用户表中包含了所有用户,我会从更复杂的条件中获取所有用户。第一次测试很顺利。如果您看到错误或有更好的变体,请分享)))谢谢。

        $result =mysql_query("
            SELECT a.IDN, c.Name_F, c.Name_L, d.Url_photo, 
                    ( SELECT COUNT(*)
                        FROM Messages AS e
                        WHERE   e.IDN = a.IDN               
                    ) AS 'mes_new' ,
                    ( SELECT LEFT(s.Messages,25)
                        FROM Messages AS s
                        WHERE s.Time= (SELECT MAX(k.Time)
                        FROM Messages AS k
                        WHERE k.IDN = a.IDN)

                    ) AS latest 
            FROM users AS a 
                    LEFT JOIN offers AS r
                ON a.IDN = r.IDN 
                    LEFT JOIN info AS c
                ON a.IDN = c.IDN
                    LEFT OUTER JOIN photos AS d
                ON c.IDN = d.IDN AND d.Flag_av='1'

            Where (r.IDN_with='$IDN' AND r.Status='2') OR a.IDN='$active'       
        ");