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

时间:2018-10-01 06:05:44

标签: php mysql mysqli

我有两个表,即jobscompany,格式如下:

表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

table2 company

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-201801-10-2018之间的数据时,它对两个日期之间的数据均无显示。那我该如何解决这个问题呢?请帮助我。

谢谢

2 个答案:

答案 0 :(得分:4)

我看到您的job_posted_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
    j.job_posted_date BETWEEN '2018-09-01' AND '2018-10-01'
ORDER BY
    j.job_posted_date DESC;

请注意,我将比较有效的MySQL日期文字,例如'2018-09-01'。您使用的格式不起作用。

如果job_posted_date列实际上以DD-MM-YYYY格式讲述了 text 日期,那么您必须首先使用STR_TO_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中存储日期信息时始终使用适当的日期列。并始终将有效的日期/时间文字与这些列进行比较。

答案 1 :(得分:0)

您输入的日期格式有误。您查询的日期格式必须与数据库中保存的日期格式相同,即(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

查询的输出也位于随附的屏幕快照中。 https://i.stack.imgur.com/T2SWb.png