2011-08-11 16 views
14

İki sütun first_name ve last_name olan bir müşteri tablom var.İki sütun göz önüne alındığında LIKE nasıl yapılır?

Her iki sütundan aynı anda gelen verileri alabilen bir sorguda LIKE'ı nasıl kullanabilirim? Örneğin

:

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE full_name LIKE 'John D%' 

Bu denedim ve bana yok full_name sütunu söyler.

+0

olduğunu adı tutucudur (PDO) SQL'de ne istediğinizi yapmak için etkili araçlar. –

+0

@OMG Tabloyu ve veri eklemeyi değiştirebildiğim için yeni bir indeksli sütun full_name oluşturdum ve cevaplarda belirtilen performans sorunları nedeniyle kullanıyorum. – RedDragon

cevap

31
SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 
+1

Ayrıca, sütunlarda olası fazladan boşlukları hesaba katmak için first_name ve last_name öğelerini de kırpmak isteyebilirsiniz. – Narnian

+1

Ayrıca, kullanıcı tarafından girilebiliyorsa, "ad, soyad" değişkenini de kontrol edebilirsiniz. – Narnian

+0

Çok basit, parlak. danke :) – arjunaaji

5

Neredeyse

SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

Not şunlardır: Bu çok iyi bir performansa sahip olmayabilir. full text search'u düşünmek isteyebilirsiniz.

0

Elimde MySql yok, ancak aşağıdaki kod gibi bir şey yapamaz mıyım?

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

Yasal Uyarı: BU ÇOK YAKIN OLABİLİR !!!

4

Kullanım yerine WHERE ait HAVING:

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
    FROM customer HAVING full_name LIKE 'John D%' 
+1

Neden WHERE yerine VAR? –

0
SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

çok yavaş olabilir ama veritabanı oldukça küçükse bunun bir önemi olmayacak. CONCAT kullanırken, Harmanlamanın hem sütun adları için aynı olduğundan emin olun, aksi takdirde size bir hata getirecektir.

LIKE bildirimimin, hem kategori adı hem de kurs adı için çalışmasını istediğiniz zamanki bildirimi aşağıda verilmiştir. Cat_id'i her iki tabloda da kontrol ediyorum, böylece hangi dersin hangi kategoriye ait olduğuna dair bir fikrim olabilir.

SELECT * FROM courses a INNER JOIN categories b ON a.cat_id=b.cat_id 
WHERE CONCAT(b.cat_name,' ',a.course_name) 
LIKE :name ORDER BY b.cat_id 

:

[Tam Metin Arama] (http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html) en
İlgili konular