连接表时,某些条目的日期列为NULL

时间:2014-05-08 13:09:59

标签: php mysql wordpress

我正在尝试将一些自定义CMS DB迁移到Wordpress,到目前为止,它一直是一个活生生的地狱。 我正在使用WP All导入插件,所以我需要一个整齐的单个.csv导出,其中包含来自此自定义cms数据库的多个表的数据。

所以,这些是我要加入的两个表中的列:

`eo_items`
| cat_id | identificator      | create_date |
---------------------------------------------
|   1    | Title of the post  | 1283786285  |

`eo_items_trans`
| item_id | lid | name              | s_desc  | l_desc  |
---------------------------------------------------------
|    1    |  33 | Title of the post | excerpt | content |

期望的结果应该是:

| item_id | lid | name              | s_desc  | l_desc  | cat_id | create_date |
--------------------------------------------------------------------------------
|    1    |  33 | Title of the post | excerpt | content |    1   | Some date   |

这是我正在使用的脚本:

SELECT DISTINCT 
eo_items_trans.item_id, 
eo_items_trans.lid, 
eo_items.cat_id, 
DATE_FORMAT(    eo_items.create_date,  '%d.%m.%Y' ) create_date, 
eo_items_trans.s_desc, 
eo_items_trans.l_desc, 
eo_items_trans.name
FROM eo_items_trans
LEFT JOIN eo_items ON ( eo_items_trans.name = eo_items.identificator ) 

此代码的问题在于,在结果表中,某些日期列为NULL,我不知道结果是否是我需要的,因为该表有大约2000行,我不知道如何交叉检查是否正确填充了类别ID。

这是我第一次使用MySQL做这样的事情,所以我真的不确定这个程序是否适合我想要实现的目标。

如果您需要任何澄清,请询问。

修改

eo_items表格比eo_items_trans多了300行,因此有一些记录在eo_items_trans中没有相应的记录。我猜这应该反映在查询中?

2 个答案:

答案 0 :(得分:3)

由于您使用的是LEFT JOIN,因此NULL的任何eo_items_trans行都会在oe_items中没有条目的情况下返回eo_items.identificator。这可能意味着eo_items_trans为空,或者与名称不完全匹配(区分大小写将适用)。

您必须调查并清除eo_items中错过{{1}}中预期行的行的数据。

答案 1 :(得分:1)

您的日期结果似乎来自或来自eo_items表中的eo_items_trans记录或者create_date为空的eo_items记录。

您可以通过执行以下操作轻松进行交叉检查

eo_items_trans中是否有记录在eo_items中没有相应的条目:

 SELECT DISTINCT eo_items_trans.name FROM eo_items_trans
 where NOT EXISTS (
                   SELECT * FROM  eo_items 
                   where eo_items.identificator = eo_items_trans.name
                  )

如果这会产生一行或多行,那么eo_items_trans.name记录在eo_items中没有对应的记录。如果这是您的问题,请在主查询中执行JOIN,而不是LEFT联接

至于eo_items中的空日期,您可能需要像这样检查

 SELECT * from eo_items WHERE create_date IS NULL

如果您在此处找到记录,则主查询中的NULL值来自