我正在处理我的网站的过滤器。
我有4张桌子:
-----------------
content_ref_table
-----------------
content_id(pk) | title | description | content_url | thumb_icon | category_id(fk) | course_id(fk) | subject_id(fk)
-----------------
course_ref_table
-----------------
course_id(pk) | course
-----------------
subject_ref_table
-----------------
subject_id(pk) | subject
-----------------
cateory_ref_table
-----------------
category_id(pk) | category
我现在有 3 个带有选择标签的过滤器:
- 类别
- 课程
- 科目
用户可以使用一个或多个筛选器进行筛选。
那么我应该使用什么查询来显示更相关的数据呢?
如果要获取这 (3) 个筛选器的id
,则可以使用 WHERE
和 LIKE
子句。这是一个开始:
$category = !empty($_POST["category"]) ? $_POST['category'] : "";
$course = !empty($_POST["course"]) ? $_POST['course'] : "";
$subject = !empty($_POST["subject"]) ? $_POST['subject'] : "";
$query = "SELECT * FROM content_ref_table
WHERE category_id LIKE '%".$category."%'
AND course_id LIKE '%".$course."%'
AND subject_id LIKE '%".$subject."%'";
关于如何实现目标有不同的方法。它也可以用PHP if
s/while
s/等循环来制作。您还应该考虑查询的速度和安全性。
[更新]
如果要查找名称,则在从其他连接的表中外包数据时,应执行一些联接。例如:
$category = !empty($_POST["category"]) ? $_POST['category'] : "";
$course = !empty($_POST["course"]) ? $_POST['course'] : "";
$subject = !empty($_POST["subject"]) ? $_POST['subject'] : "";
$query = "SELECT content_ref.title FROM content_ref_table
LEFT JOIN category_ref_table ON content_ref_table.category_id = category_ref_table.category_id
AND category_ref_table.category LIKE '%".$category."%'
LEFT JOIN course_ref_table ON content_ref_table.course_id = course_ref_table.course_id
AND course_ref_table.course LIKE '%".$course."%'
LEFT JOIN subject_ref_table ON content_ref_table.subject_id = subject_ref_table.subject_id
AND subject_ref_table.subject LIKE '%".$subject."%'";
如果您要查找的数据来自联接表,则不必使用WHERE
子句,您始终可以将该条件与联接子句放在一起,但它与OUTER JOIN
的效果并不总是相同的。