代码适用于网站docuindex.net
我需要为一部纪录片添加多个类别,我不知道该怎么做。因此,对于ex,当您单击Nature类别时,您将看到x文档,如果您单击科学类别,您将看到x文档,如果它属于它们
<?php
$subQ = '';
if(isset($_GET['cat']) && $_GET['cat']!=''){
$subQ = ' WHERE Category="'.mysql_real_escape_string(str_replace('_',' ',$_GET['cat'])).'"';}
if(isset($_GET['cat2']) && $_GET['cat2']!=''){
$subQ = ' WHERE Category2="'.mysql_real_escape_string(str_replace('_',' ',$_GET['cat2'])).'"';}
?>
<a href="?cat=nature">Nature</a>
<a href="?cat2=science">Science</a>
应该是
之类的东西<a href="?cat=nature or cat2=nature">Nature</a>
<a href="?cat=scinece or cat2=science">Science</a>
如果有人能提供帮助,那就太棒了
谢谢你们每个人特别是Sam Sullivan!缺少的是:<a href="?cat=scinece&cat2=science">Science</a>
并为每个类别<a href="?cat=nature&cat2=nature">Nature</a>
等执行此操作(在我编写的主要帖子中,或者是AND的内容)。这样我就可以将多个主要类别和子类别添加到同一个纪录片中。
答案 0 :(得分:0)
试试这个:
<?php
$subQ = '';
if(isset($_GET['cat']) && $_GET['cat']!='')
$subQ = ' WHERE Category="'.mysql_real_escape_string(str_replace('_',' ',$_GET['cat'])).'" OR Category2="'.mysql_real_escape_string(str_replace('_',' ',$_GET['cat2'])).'"';
?>
答案 1 :(得分:0)
您可以修改以下代码:
<?php
$subQ = '';
if(isset($_GET['cat']) && $_GET['cat']!=''){
$subQ = ' WHERE Category="'.mysql_real_escape_string(str_replace('_',' ',$_GET['cat'])).'"';}
if(isset($_GET['cat2']) && $_GET['cat2']!=''){
$subQ .= ' and Category2="'.mysql_real_escape_string(str_replace('_',' ',$_GET['cat2'])).'"';}
?>
答案 2 :(得分:0)
不太确定,但我认为您正在寻找MySQL的OR
。
<?php
$subQ = 'WHERE';
if(!empty($_GET['cat'])) {
$category = mysql_real_escape_string(str_replace('_',' ',$_GET['cat']));
$subQ .= " Category='category' OR";
}
if(!empty($_GET['cat2'])) {
$category = mysql_real_escape_string(str_replace('_',' ',$_GET['cat2']));
$subQ .= " Category='category' OR";
}
if($subQ == 'WHERE') $subQ = '';
$subQ = substr($subQ, 0, -3); // remove trailing OR
?>
<a href="?cat=nature&cat2=science">Nature OR Science</a>
如果您希望这是自然和科学,您可以将OR
设置为AND
并将最终功能修改为substr($subQ, 0, -4);
以删除额外的角色。
答案 3 :(得分:0)
为了做到这一点,你需要在类别和纪录片之间建立多对多的关系。要做到这一点,类别不应再是documentary
表中的一个字段(我假设它是所谓的)。相反,您将创建两个新表,category
表包含两个字段,类别ID和名称。第二个表将是一个documentary_to_category
表,其中包含两个字段,一个纪录片ID和一个类别ID。纪录片ID和类别ID分别是documentary.id和category.id的外键。
现在您需要将查询重写为以下内容:
$categories = array();
foreach ($_GET['category'] as $categoryId) {
if (ctype_digit($categoryId)) {
$categories[] = $categoryId;
}
}
$sql = 'SELECT d.id, d.name, category_id
FROM documentary d
JOIN documentary_to_category dtc
ON dtc.documentary_id = d.id
WHERE dtc.category_id IN(' . implode(',', $categories) . ')
GROUP BY d.id
HAVING COUNT(DISTINCT category_id) = ' . count($categories);
现在您的链接看起来像这样:
<a href="?category[]=1&category[]=2">Nature and Science</a>
下面我已经包含了两个新表的图形表示:
-----------------------------------------
| category |
------------------------------------------
| id | name |
------------------------------------------
| 1 | Science |
| 2 | Nature |
| 3 | ... |
------------------------------------------
-----------------------------------------
| documentary_to_category |
-----------------------------------------
| documentary_id | category_id |
-----------------------------------------
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
| ... | ... |
-----------------------------------------