在基于PHP的MySQL查询中使用AND而不是JOIN

时间:2013-12-04 15:31:06

标签: php mysql

据我所知,AND不能用于指定两个不同的表,但还有另一种方法可以简单地在两个不同的表中查询完全相同的列名吗?

目前我有一个PHP变量:

define('TB_RESI', 'RESI');

以及如下查询。我还需要使用相同的列查询名为RESI的表...实现此目的的最佳方法是什么?

当前查询:

$sql = 'SELECT PictureCount AS PIC_COUNT, DATE(PictureModifiedDateTime) AS FILE_DATE, ListingRid AS HOME_ID 
            FROM ' . TB_RESI . 
            ' WHERE (COUNTY = "Lee") AND (
                ListingOfficeMLSID = "PREFP" OR 
                ListingOfficeMLSID = "PREFP2" OR 
                ListingOfficeMLSID = "PREFP3" OR 
                ListingOfficeMLSID = "PREFP4" OR 
                ListingOfficeMLSID = "PREFP6"
            ) 
            AND (PictureCount >= 4) 
            ORDER BY EntryDate DESC';

3 个答案:

答案 0 :(得分:1)

使用UNION组合两个表

$sql = 'SELECT PictureCount AS PIC_COUNT, DATE(PictureModifiedDateTime) AS FILE_DATE, ListingRid AS HOME_ID 
            FROM (SELECT * FROM ' . TB_RESI . ' UNION SELECT * FROM ' . RESI . ') AS ALL' .
            ' WHERE (COUNTY = "Lee") AND (
                ListingOfficeMLSID = "PREFP" OR 
                ListingOfficeMLSID = "PREFP2" OR 
                ListingOfficeMLSID = "PREFP3" OR 
                ListingOfficeMLSID = "PREFP4" OR 
                ListingOfficeMLSID = "PREFP6"
            ) 
            AND (PictureCount >= 4) 
            ORDER BY EntryDate DESC';

答案 1 :(得分:1)

如果两个表之间包含链接,请使用INNER JOIN拉入第二个图片表。

SELECT tbla.x, tbla.y, tblb.f
FROM tbla
    INNER JOIN tblb ON tblb.id = tbla.tblbid
WHERE tbla.x = 'test' AND tblb.f > 4;

我试图让这个例子尽可能简单。

好的,好像你应该从你发表的评论和回复中删除UNION路线。

SELECT PictureCount AS PIC_COUNT, DATE(PictureModifiedDateTime) AS FILE_DATE, ListingRid AS HOME_ID 
            FROM (SELECT * FROM ' . TB_RESI . ' 
            WHERE (COUNTY = "Lee") AND (
                ListingOfficeMLSID = "PREFP" OR 
                ListingOfficeMLSID = "PREFP2" OR 
                ListingOfficeMLSID = "PREFP3" OR 
                ListingOfficeMLSID = "PREFP4" OR 
                ListingOfficeMLSID = "PREFP6"
            ) 
            AND (PictureCount >= 4) 
            ORDER BY EntryDate DESC

UNION

            SELECT PictureCount AS PIC_COUNT, DATE(PictureModifiedDateTime) AS FILE_DATE, ListingRid AS HOME_ID 
            FROM (SELECT * FROM ' . TB_RESI2 . ' 
            WHERE (COUNTY = "Lee") AND (
                ListingOfficeMLSID = "PREFP" OR 
                ListingOfficeMLSID = "PREFP2" OR 
                ListingOfficeMLSID = "PREFP3" OR 
                ListingOfficeMLSID = "PREFP4" OR 
                ListingOfficeMLSID = "PREFP6"
            ) 
            AND (PictureCount >= 4) 
            ORDER BY EntryDate DESC

其中TB_RESI是第一个表的名称,TB_RESI2是第二个表名

答案 2 :(得分:0)

如果由于某种原因不想进行JOIN,可以使用多种SQL(例如MySQL)来命名表,并在WHERE子句中使用该名称:

 FROM ' . TB_RESI . ' as TBR, ' . TC_RESI . ' as TCR ' .

...

 WHERE TBR.field1 = TCR.field2

等。当然,你应该看看使用JOIN是否是一个更好的解决方案。