2012-04-14 99 views
37

这是我之前的一个跟进问题。我想写呼应所有以字母B开头的条目mysql的语句选择全部位置[第一个字母以B开头]

Function.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?类别= B

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

喜欢,我猜。再一个字母表中的每一个字母,和一个与杂项(编号等)

回答

72
SELECT author FROM lyrics WHERE author LIKE 'B%'; 

确保您的author有一个指标,但!

+0

好感谢,那是再容易预期。我遇到一个奇怪的问题:你的版本效果很好。但只要我改变它就像:'$ first = $ _GET ['category']; \t $ first = $ first [0]。 “%”; $(“SELECT author”FROM lyrics WHERE author LIKE“。$ first。”“)或die(mysql_error());'它不再工作。即使我改变'$ first =“b%”;'它不起作用。 – user1333327 2012-04-14 20:33:47

+1

它不是奇怪的问题,它是你对事物的误解。 %不适用于=。如果你使用相等的话,那么当你使用=“b%”时你必须提供完全匹配,它发现DB中的值b%不是以b开头的。要找到起始值,您必须使用like。 – Shehzad 2012-04-14 22:19:30

+0

上面的php容易受到SQL注入的影响。请使用准备好的陈述和占位符。 – 2012-04-15 12:20:24

1

按照您的评论发布到ceejayoz的答案,两件事情都搞砸豆蔻:

  1. $first不是一个数组,它是一个字符串。用$first .= "%"代替$first = $first[0] . "%"。只是为了简单。 (PHP string operators

  2. 应该引用与LIKE运算符进行比较的字符串。用LIKE '".$first."'")代替LIKE ".$first."")。 (MySQL String Comparison Functions

9

这将为MYSQL

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

工作,在这个正则表达式表示正则表达式

这是T-SQL

SELECT Name FROM Employees WHERE Name LIKE '[B]%' 
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 
1

您可以使用:

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

这不会使用列索引,并且会至少在MySQL中全面扫描表。 – lyomi 2017-07-12 16:33:34

+0

@lyomi全屏扫描是什么意思? – Darpan 2017-09-06 18:00:03

相关问题