2012-04-14 18 views
37

Bu, bir önceki soruya verilen bir soru. Mektupta B ile başlayan her girdiyi yankıları mysql ifadeleri yazmak istiyorumTümünü seç [ilk harf B ile başlıyor]

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? Kategori sanırım Bunun gibi = b

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

. Ve sonra alfabenin her harfi için bir ve misc ile bir (sayı vb)

cevap

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

bile, author üzerinde bir dizin olduğundan emin olun!

+0

Tamam teşekkürler, beklenen sonra daha kolaydı. Yine de garip bir problemim var: Versiyonunuz harika çalışıyor. Ama değiştirdiğim gibi: '$ first = $ _GET ['category']; \t $ first = $ first [0]. "%"; \t \t $ query = mysql_query ("SELECT yazar FROM sözleri NEREDE yazar LIKE". $ First. "") Veya die (mysql_error()); 'artık çalışmıyor. İlk $ = "b%" yi değiştirsem bile, işe yaramıyor. – user1333327

+1

Onun garip problemi, onun bir şeyleri yanlış anlamanız. % = ile çalışmıyor. Eğer eşit kullanırsanız o zaman = "b%" kullandığınızda tam eşleşmeyi sağlamanız gerekir, b'de b ile başlamayan b% b değerini buldu. Başlangıç ​​değerlerini bulmak için kullanmak zorundasınız. – Shehzad

+0

Yukarıdaki php, SQL enjeksiyonuna açıktır. Hazırlanmış ifadeleri ve yer tutucuları kullanın lütfen. –

1

ceejayoz cevabı yayınlanan Yorumlarınız ardından, iki şey bir litte berbat halde:

  1. $first bir dizi değil, bir dize var. $first = $first[0] . "%"'u $first .= "%" ile değiştirin. Sadece sadelik için. (PHP string operators)

  2. LIKE operatörü ile karşılaştırılan dize alıntı yapılmalıdır. LIKE ".$first.""), LIKE '".$first."'") ile değiştirin. (MySQL String Comparison Functions)

9

Bu, Normal İfade olarak MySQL

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

için çalışacaktır normal ifade

ve

için bu T-SQL

SELECT Name FROM Employees WHERE Name LIKE '[B]%' 
2
açılımı

SQL Beyanı:

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

Sonuç:

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

Sen kullanabilirsiniz:

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

Bu, sütun dizinini kullanmaz ve en azından MySQL içinde tabloyu tam olarak tarar. – lyomi

+0

@lyomi Tam tarama ile ne demek istiyorsun? – Darpan

İlgili konular