2012-04-14 52 views
37

Đây là câu hỏi tiếp theo cho câu hỏi trước của tôi. Tôi muốn viết một báo cáo mysql mà vang mỗi entry mà bắt đầu bằng chữ B.Chọn tất cả nơi [chữ cái đầu tiên bắt đầu bằng chữ 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? Category = b

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

Giống như tôi đoán. Và sau đó một cho mỗi chữ cái của bảng chữ cái, và một với misc (số vv)

Trả lời

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

Đảm bảo bạn có chỉ mục trên author, mặc dù!

+0

Được rồi cảm ơn, đó là dễ dàng hơn sau đó mong đợi. Một vấn đề lạ tôi gặp phải: Phiên bản của bạn hoạt động rất tốt. Nhưng ngay sau khi tôi thay đổi nó thành: '$ first = $ _GET ['category']; \t $ đầu tiên = $ đầu tiên [0]. "%"; \t \t $ query = mysql_query ("SELECT author FROM lyrics WHERE author LIKE". $ First. "") Hoặc die (mysql_error()); 'nó không hoạt động nữa. Ngay cả khi tôi thay đổi '$ first =" b% ";' nó không hoạt động. – user1333327

+1

Vấn đề không lạ của nó là sự hiểu lầm của bạn về mọi thứ. % không hoạt động với =. nếu bạn sử dụng bằng nhau thì bạn phải cung cấp kết hợp chính xác khi bạn sử dụng = "b%" nó tìm thấy giá trị b% trong DB không bắt đầu bằng b. Để tìm các giá trị bắt đầu, bạn phải sử dụng như thế nào. – Shehzad

+0

Các php ở trên là dễ bị SQL injection. Vui lòng sử dụng câu lệnh và trình giữ chỗ đã chuẩn bị. Mã số –

1

Tiếp theo nhận xét của bạn được đưa lên câu trả lời ceejayoz của, có hai điều là điều sai lầm một litte:

  1. $first không phải là một mảng, đó là một chuỗi. Thay thế $first = $first[0] . "%" theo $first .= "%". Chỉ vì sự đơn giản. (PHP string operators)

  2. Chuỗi được so sánh với LIKE toán tử sẽ được trích dẫn. Thay thế LIKE ".$first."") theo LIKE '".$first."'"). (MySQL String Comparison Functions)

9

này sẽ làm việc cho MYSQL

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

Trong REGEXP này là viết tắt của biểu thức chính quy

này là dành cho T-SQL

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

SQL Tuyên bố:

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

Kết quả:

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

Bạn có thể sử dụng:

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

Điều này sẽ không sử dụng chỉ mục cột và sẽ quét toàn bộ bảng, ít nhất là trong MySQL. – lyomi

+0

@lyomi bạn có ý nghĩa gì khi quét toàn bộ? – Darpan

Các vấn đề liên quan