【问题标题】:How to select multiple records (row) from a column in mysql?如何从mysql中的列中选择多条记录(行)?
【发布时间】:2009-02-13 04:40:27
【问题描述】:

我想从这些 id 中显示四 (4) 个项目的名称: 我可以这样做吗?

SELECT item_name from items WHERE item_id IN ('001', '012', '103', '500')

SELECT item_name from items WHERE item_id = '001' or item_id = '012' or item_id = '103' or item_id = '500'

回应所有回答

嗯,大多数答案都说它有效,但它并没有真正有效。这是我的代码:

$query = "SELECT `item_name` from items WHERE item_id IN('s001','a012','t103','p500')";

$result = mysql_query($query, $conn) or die (mysql_error());
$fetch =  mysql_fetch_assoc($result) or die (mysql_error());
$itemsCollected = $fetch['item_name'];
echo $itemsCollected;

item_id 是字母数字。

【问题讨论】:

  • 当然,这两种方法都可以。这很容易测试,你为什么不试试呢?
  • stackoverflow.com/questions/544673/… 的完全相同的副本,也是您提出的,这里没有真正的问题,因为完全有可能按照您的要求进行操作,并且 1 秒钟的尝试就会显示给您。投票结束。
  • 试了很多次,只有1个结果。这就是我发布这个问题的原因
  • 它不起作用..我急需帮助..

标签: mysql select


【解决方案1】:

您可以选择其中任何一种,但对于任何大型查询,IN 查询的效率都要高得多。很久以前我做了一些简单的测试,结果表明使用 IN 结构的速度大约快 10 倍。如果您询问语法是否正确,那么是的,它看起来很好,除了缺少分号来完成语句。

编辑:看起来你问的实际问题是“为什么这些查询只返回一个值”。嗯,看你贴的示例代码,问题出在这里:

$fetch = mysql_fetch_assoc($result) or die (mysql_error());
$itemsCollected = $fetch['item_name'];
echo $itemsCollected;

您需要循环和迭代,直到没有更多结果可以获取,如Pax pointed out。请参阅mysql_fetch_assoc 的 PHP 手册页:

$sql = "SELECT item_name from items WHERE item_id IN('s001','a012')";
$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

// While a row of data exists, put that row in $row as an associative array
// Note: If you're expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you'll
//       then create $userid, $fullname, and $userstatus
while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];
    echo $row["userstatus"];
}

mysql_free_result($result);

【讨论】:

    【解决方案2】:

    是的,这两个都应该可以正常工作。您看到的实际问题是什么?

    如果如您所说,只返回一条记录,请尝试:

    select item_name from items order by item_id
    

    并检查完整的输出以确保您有 001、012、103 和 500 的条目。

    如果两个这些查询只返回一行,我怀疑不会。

    如果它们都存在,请检查表定义,可能该列是 CHAR(4) 并且包含其他的空格。您可能确实在 MySQL 中发现了一个错误,但我对此表示怀疑。

    编辑后:

    这是一个 perl/mysql 问题,而不是 SQL 问题:mysql_fetch_array() 一次只返回 一个 数据集的行,并前进一个指向下一行的指针。

    您需要执行以下操作:

    $query = "SELECT item_name from items WHERE item_id IN('s001','a012')";
    $result = mysql_query($query, $conn) or die (mysql_error());
    if (mysql_num_rows($result) == 0) {
        echo "No rows found, nothing to print so am exiting";
        exit;
    }
    while ($row = mysql_fetch_assoc($result)) {
        echo $row["item_name"];
    }
    

    【讨论】:

    • 只有 1 个结果。即仅显示 id 001
    • 对,所以这可能是那些 item_id 的行数。表中是否存在012、103、500?
    • 执行“SELECT item_name from items order by item_id”并检查。
    • 所有id都存在于数据库中
    【解决方案3】:

    您的 ID 字段必须设置为自动递增,我猜。我曾经遇到过问题,我将自动增量更改为 int。在 IN 字段中,如果您传递参数以匹配自动增量变量,您只返回第一个参数,其余的会产生错误。

    【讨论】:

      【解决方案4】:

      使用mysql_fetch_assoc 获取查询并将mysql_fetch_assoc 查询中的值分配到一个数组中。就这么简单

      $i=0;
      $fullArray = array();
      
      $query = mysql_query("SELECT name FROM users WHERE id='111' OR id='112' OR id='113' ")or die(mysql_error());
      
      while($row = mysql_fetch_assoc($query)){
          foreach ($row as $value) {
              $fullArray[$i] = $value;
          }
          $i++;
      }
      
      var_dump($fullArray); 
      
      echo $fullArray[0]."<br/>".$fullArray[1]."<br/>".$fullArray[2];`
      

      【讨论】:

        【解决方案5】:

        您还可以使用 mysql_num_rows 函数告诉您查询检索到了多少行,然后使用该结果来增加 for 循环。一个例子。

        $num_rows=mysql_num_rows($query_results);
        for ($i=0; $i <$num_rows ; $i++) { 
            $query_array[]=mysql_fetch_assoc($query_results);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-24
          • 1970-01-01
          • 2012-02-07
          • 1970-01-01
          • 2013-02-18
          相关资源
          最近更新 更多