php链接具有相同值的多个变量

时间:2014-01-07 19:30:56

标签: php sql

代码适用于网站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的内容)。这样我就可以将多个主要类别和子类别添加到同一个纪录片中。

4 个答案:

答案 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        |
|      ...           |       ...        |
-----------------------------------------