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
工作
和公司
,格式如下:
表1jobs
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,所以查询也应该使用它(不过可能会有一些设置值来更改它)。