like运算符不能只检索php

时间:2018-03-02 12:00:25

标签: php mysql sql-like

这是我的代码

 <?php
error_reporting(E_ALL & ~E_NOTICE);
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "hostel";

// Create connection
$link = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 


if(isset($_REQUEST['submit'])){
    $state=$_POST['state'];
    $district=$_POST['district'];
    $area=$_POST['area'];
    $category=$_POST['hostel_category'];
    $bed=$_POST['bed_type'];
    $query_sid="SELECT * FROM hostel_register WHERE bed_type like '%".$bed."%' and state like '%".$state."%' and district like '%".$district."%' and category like '%".$category."%'  and status like '%".paid."%' and area like '%".$area."%'";
    if($result_sid = mysqli_query($link, $query_sid) ){


    while ($row = mysqli_fetch_assoc($result_sid)) {
    ?>
<center>

  <div class="col-sm-4 well"><h3><font color="#990000"><?php echo $row['hostel_name'];?></font></h3>
                        <p><p><?php echo $row['district'];?>-<?php echo $row['state'];?></p>
                        <p><?php echo $row['area'];?></p>
                        <p><?php echo $row['category'];?></p>
                        <p><?php echo $row['bed_type'];?></p>
                        <p><?php echo $row['rent_nonac_five'];?>/- Rs</p>
                        <p><a href="HostelDetails.php?details_id=<?php echo $row['id'];?>" class="btn btn-info">Details</a></p>
  </div>

  </center>

     <?php   }

    /* free result set */
}
else {echo "No Result";}
}

/* close connection */
mysqli_close($link);
?>

在DB中有一个列&#34; bed_type&#34;价值&#34; AC两张床,AC三床&#34;。对不起,我正在写完整的代码,但我真的很困惑。如何只显示一个值。我用&#34;喜欢&#34;但这是取得所有价值。但我想只展示一个。

1 个答案:

答案 0 :(得分:1)

您需要规范化您的数据库。 从不在一列中存储多个值。

在单个列中存储多个逗号分隔值绝不是一个好主意,其中一个原因是因为它会导致与您的问题完全相同的问题。 (还有更多原因) 显然你可以用逗号存储字符串,但你的数据库看不到&#34; AC One Bed,AC Two Bed&#34;作为两个不同的项目,它只是一个字符串。

你知道你也不应该创建另一个名为bed_type_2的列,因为如果有第三种床类型怎么办?

因此,为了规范化数据库,您需要做的是:

1)创建一个名为bed_types的新表,其中包含id和类型/名称

2)插入所有可能的床型。每种类型一个条目。 (一个用于&#34; AC两床&#34;一个用于&#34; AC三床&#34;等等)

3)创建另一个名为hostel_register_bed_types的表,该表将用作联结/ helpertable / jointable。
在该表中,将有一个来自hostel_register_id的外键和一个bed_type_id的外键。

如果hostel_register有多个bed_types,您将在hostel_register所拥有的每种床型中插入一条记录{/ 1}}

现在您应该有一个更规范化的数据库结构,您可以单独访问/选择您的床型。 hostel_register现在可以拥有任意数量的床型,而无需在一列中存储多个值。

您必须使用join语句相应地编辑查询。

如果您想了解这些内容,请点击以下链接:
Many-to-Many relationships and junction tables
DB normalization