【问题标题】:php script returns every row containing a wordphp 脚本返回包含一个单词的每一行
【发布时间】:2015-03-09 03:29:48
【问题描述】:

这个 php 脚本返回 mySQL 数据库中的每一行:

<?php

$host = "host_name";
$db = "database_name"; 
$user = "user_name";
$pass = "password";

$connection = mysql_connect($host, $user, $pass);

//Check to see if we can connect to the server
if(!$connection)
{
    die("Database server connection failed.");  
}
else
{
    //Attempt to select the database
    $dbconnect = mysql_select_db($db, $connection);

    //Check to see if we could select the database
    if(!$dbconnect)
    {
        die("Unable to connect to the specified database!");
    }
    else
    {
        $query = "SELECT * FROM farmer";
        $resultset = mysql_query($query, $connection);

        $records = array();

        //Loop through all our records and add them to our array
        while($r = mysql_fetch_assoc($resultset))
        {
            $records[] = $r;        
        }

        //Output the data as JSON
        echo json_encode($records);
    }


}

?>

此脚本运行良好,但会返回每一行。

假设我的数据库包含农民的姓名及其产品类型。第一列是“id”,第二列是“farmer_name”,第三列是“produce”。农产品是这样输入的:豆类、玉米、生菜、草莓、西红柿。

我想要做的是更改上述脚本,使其仅返回包含种植玉米的农民的姓名以及他们种植的所有农产品类型的行。所以,我不仅要名字,还要所有产品的清单,只要农民种玉米。

这是否可能基于数据库的结构方式?我用针/干草堆做了几次尝试,但空手而归。我对php知之甚少。

【问题讨论】:

  • 首先如果你有能力设计表格的结构,不要这样做,因为它是反规范化的
  • 澄清一下,product 列是每行包含一个项目,还是包含所有产品的字符串?
  • 后者会很糟糕!
  • 它包含一个字符串。我能想到构造它的唯一另一种方法是为每个添加一列。这会是最佳做法吗?
  • 绝对不是。查看 1NF、2NF、3NF 和 E.F. Codd。如果我写给你,我很乐意

标签: php mysql arrays search


【解决方案1】:

就像使用 WHERE 一样简单

$query = "SELECT * FROM farmer WHERE produce = 'corn'";

请注意mysql_ 函数已被贬值

【讨论】:

  • 我喜欢简单。但是,上面只返回 []。
【解决方案2】:
SELECT `farmer_name`, `produce` FROM `farmer` WHERE `produce` LIKE '%corn%'

这将返回在农产品领域的任何地方找到玉米的行。

【讨论】:

  • 哦,这意味着您将它们全部放在一列中。如果他们决定种植茄子,您不能添加一行但必须解析。数据库表不是这样设计的
  • 看来这是您的选择。使用您当前的结构,您的 ADD 查询将是 "UPDATE farmer SET produce = CONCAT(produce , ', eggplant') WHERE farmer_name=$farmerName";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多