Php 如何使用内部联接在两个日期之间从数据库获取数据?

Php 如何使用内部联接在两个日期之间从数据库获取数据?,php,mysql,mysqli,Php,Mysql,Mysqli,我有两个表,即工作和公司,格式如下: 表1jobs company_name job_title category job_posted_date ============ ================= =========== =============== ibm xamarin developer it jobs 26-09-2018 tech mahindra php devel

我有两个表,即
工作
公司
,格式如下:

表1
jobs

company_name    job_title            category       job_posted_date
============    =================   ===========     ===============
ibm             xamarin developer   it jobs         26-09-2018
tech mahindra   php developer       it jobs         27-09-2018
milkyway        java developer      it jobs         15-08-2018
表2
公司

company_name    company_logo         
============    ============         
ibm             logo_ibm.png 
tech mahindra   logo_tech.png
milkyway        logo_milkyway.png
我的问题是:

SELECT company.company_logo, post_jobs.company_name, jobs.job_title, jobs.job_posted_date 
FROM company 
INNER JOIN jobs 
on jobs.company_name = company.company_name 
WHERE jobs.category = 'it Jobs' and (jobs.job_posted_date between '01-09-2018' and '01-10-2018') 
ORDER BY jobs.job_posted_date desc
当我点击此查询并查找从
01-09-2018
01-10-2018
之间的数据时,我看不到两个日期之间的数据。那么我如何解决这个问题呢?请帮帮我


谢谢你

我发现你的
工作发布日期
栏有问题。也许您正在那里存储文本日期。假设不是,并且它是一个真实的日期列,您可以尝试以下查询:

SELECT
    c.company_logo,
    j.company_name,
    j.job_title,
    j.job_posted_date
FROM company c
INNER JOIN jobs j
    ON j.company_name = c.company_name
WHERE
    j.category = 'it Jobs' AND
    j.job_posted_date BETWEEN '2018-09-01' AND '2018-10-01'
ORDER BY
    j.job_posted_date DESC;
注意,我比较了有效的MySQL日期文本,例如
'2018-09-01
'。您使用的格式不起作用

如果
job\u posted\u date
列实际上是以
DD-MM-yyyyy
格式编写文本日期的故事,那么您必须首先使用
STR\u to\u date
转换它们:

SELECT
    c.company_logo,
    j.company_name,
    j.job_title,
    j.job_posted_date
FROM company c
INNER JOIN jobs j
    ON j.company_name = c.company_name
WHERE
    j.category = 'it Jobs' AND
    STR_TO_DATE(j.job_posted_date, '%d-%m-%Y') BETWEEN '2018-09-01' AND '2018-10-01'
ORDER BY
    j.job_posted_date DESC;

这个故事的寓意是,在MySQL中存储日期信息时,始终使用适当的日期列。并始终将有效的日期/时间文本与这些列进行比较。

我发现您的
作业发布日期列有问题。也许您正在那里存储文本日期。假设不是,并且它是一个真实的日期列,您可以尝试以下查询:

SELECT
    c.company_logo,
    j.company_name,
    j.job_title,
    j.job_posted_date
FROM company c
INNER JOIN jobs j
    ON j.company_name = c.company_name
WHERE
    j.category = 'it Jobs' AND
    j.job_posted_date BETWEEN '2018-09-01' AND '2018-10-01'
ORDER BY
    j.job_posted_date DESC;
注意,我比较了有效的MySQL日期文本,例如
'2018-09-01
'。您使用的格式不起作用

如果
job\u posted\u date
列实际上是以
DD-MM-yyyyy
格式编写文本日期的故事,那么您必须首先使用
STR\u to\u date
转换它们:

SELECT
    c.company_logo,
    j.company_name,
    j.job_title,
    j.job_posted_date
FROM company c
INNER JOIN jobs j
    ON j.company_name = c.company_name
WHERE
    j.category = 'it Jobs' AND
    STR_TO_DATE(j.job_posted_date, '%d-%m-%Y') BETWEEN '2018-09-01' AND '2018-10-01'
ORDER BY
    j.job_posted_date DESC;

这个故事的寓意是,在MySQL中存储日期信息时,始终使用适当的日期列。并始终将有效的日期/时间文字与这些列进行比较。

您的日期格式有误。在您的查询中,日期格式必须与保存在数据库中的日期格式相同,即(YYYY-MM-DD),因此,根据新的查询如下所示:

SELECT company.company_logo, jobs.company_name, jobs.job_title, jobs.job_posted_date 
FROM company 
INNER JOIN jobs 
on jobs.company_name = company.company_name 
WHERE jobs.category = 'it Jobs' and (jobs.job_posted_date between '2018-09-01' and '2018-10-01') 
ORDER BY jobs.job_posted_date desc
查询的输出也在这里的屏幕截图中。

您的日期格式有误。在您的查询中,日期格式必须与保存在数据库中的日期格式相同,即(YYYY-MM-DD),因此根据该新查询,如下所示:

SELECT company.company_logo, jobs.company_name, jobs.job_title, jobs.job_posted_date 
FROM company 
INNER JOIN jobs 
on jobs.company_name = company.company_name 
WHERE jobs.category = 'it Jobs' and (jobs.job_posted_date between '2018-09-01' and '2018-10-01') 
ORDER BY jobs.job_posted_date desc
查询的输出也在这里的屏幕截图中。

您的职务类别字段在哪里?你能不能把这个带值的字段也放在表中,
job\u posted\u date
列的类型是什么?MySQL的日期格式是YYYY-MM-DD,所以查询也应该使用它(虽然可能有一些设置值可以更改)。你的job.category字段在哪里?你能不能把这个带值的文件也放在表中,
job\u posted\u date
列的类型是什么?MySQL的日期格式是YYYY-MM-DD,所以查询也应该使用它(不过可能会有一些设置值来更改它)。