【问题标题】:Select all where [first letter starts with B]选择所有[第一个字母以B开头]的地方
【发布时间】:2012-04-14 20:07:36
【问题描述】:

这是我上一个问题的后续问题。我想写一个 MYSQL 语句来回显每个以字母 B 开头的条目。

函数.php

function getCategory() {
$query = mysql_query("SELECT author FROM lyrics WHERE author [starts with letter B]") or die(mysql_error());
while ($row = mysql_fetch_assoc($query)) { ?>
    <p><a href="##"><?= $row['author']; ?></a></p>
    <?php }

Category.php?category=b

<?php include 'includes/header.php' ?>
<?php getCategory(); ?>
<?php include 'includes/footer.php' ?>

我猜是这样的。然后一个用于字母表中的每个字母,一个用于杂项(数字等)

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT author FROM lyrics WHERE author LIKE 'B%';
    

    不过,请确保您在 author 上有一个索引!

    【讨论】:

    • 好的,谢谢,这比预期的要容易。我遇到了一个奇怪的问题:你的版本很好用。但是,一旦我将其更改为喜欢:$first = $_GET['category']; $first = $first[0] . "%"; $query = mysql_query("SELECT author FROM lyrics WHERE author LIKE ".$first."") or die(mysql_error());,它就不再起作用了。即使我更改$first = "b%"; 也不起作用。
    • 你对事物的误解并不奇怪。 % 不适用于 =。如果您使用equal,那么您必须在使用="b%" 时提供完全匹配,它会发现DB 中的值b% 不是以b 开头。要查找起始值,您必须使用 like。
    • 上面的php容易被SQL注入。请使用准备好的语句和占位符。
    • @AaronBrown user1333327 的代码是,不是我的。可能想澄清一下。
    • 是的,ceejayoz。并不是要暗示您的代码是问题所在。
    【解决方案2】:

    SQL 语句:

     SELECT * FROM employee WHERE employeeName LIKE 'A%';
    

    结果:

    Number of Records: 4
    
    employeeID  employeeName    employeeName    Address City    PostalCode  Country
    
    1           Alam             Wipro          Delhi   Delhi   11005      India
    
    2           Aditya           Wipro          Delhi   Delhi   11005      India
    
    3           Alok             HCL            Delhi   Delhi   11005      India
    
    4           Ashok            IBM            Delhi   Delhi   11005      India
    

    【讨论】:

      【解决方案3】:

      你可以使用:

      WHERE LEFT (name_field, 1) = 'B';
      

      【讨论】:

      • 这不会使用列索引,而是会全扫描表,至少在 MySQL 中是这样。
      【解决方案4】:

      这适用于 MYSQL

      SELECT Name FROM Employees WHERE Name REGEXP '^[B].*$'
      

      在此 REGEXP 代表正则表达式

      这是针对 T-SQL 的

      SELECT Name FROM Employees WHERE Name LIKE '[B]%'
      

      【讨论】:

        【解决方案5】:

        在您对 ceejayoz 的回答发表评论之后,有两件事有点混乱:

        1. $first 不是数组,而是字符串。将$first = $first[0] . "%" 替换为$first .= "%"。只是为了简单。 (PHP string operators)

        2. LIKE 运算符比较的字符串应加引号。将LIKE ".$first."") 替换为LIKE '".$first."'")。 (MySQL String Comparison Functions)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-18
          • 1970-01-01
          • 2018-07-05
          相关资源
          最近更新 更多