2012-04-14 80 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

相關問題