2016-03-28 20 views
1

Kullanıcıları, kullanıcı tarafından girilen arama terimi için numaralı telefonumdan arama yapmak için bir arama sorgum var. 3 satır içinde

Benim sorgu arar:

user_last_name
user_first_name
user_business_address

Her şey bir anda satır biri için kullanıcı aramaları gibi ince sürece çalışır.

Kullanıcı_first_name 'Alex' ve user_last_name 'Smith' diyelim. 'Alex' ya da 'Smith' için arama yaparsam her şey yolunda gider.

MYSQL - Tek arama terimi ile 2 sütun halinde arama


Sorun

zaman için kullanıcı 'Alex Smith kısa sürede boşluk tuşuna artık gösterilen herhangi bir sonuç olmadığı isabet gibidir.

Her iki satırda da nasıl arama yapabilirim?

Boşluklarla nasıl baş edebilirim?


Arama sorgusu

$term = strip_tags('%'.$_GET['term'].'%'); 

$query = $database->prepare("SELECT COUNT(*) FROM users WHERE user_last_name LIKE :term OR user_first_name LIKE :term OR user_business_address LIKE :term ORDER BY user_id LIMIT 10"); 
$query->execute(array(':term' => $term)); 

$count = $query->fetchColumn(); 

if ($count >= 1) { 
    $query2 = $database->prepare("SELECT * FROM users WHERE user_last_name LIKE :term OR user_first_name LIKE :term OR user_business_address LIKE :term ORDER BY user_id LIMIT 10"); 
    $query2->execute(array(':term' => $term)); 

    $results = $query2->fetchAll(); 
} 

Artık kodunu görmek istiyorsanız lütfen bize bildirin.

Her türlü yardım için çok minnettar olurum!

+0

Bunu mu demek istediniz: 3 _columns_? –

+0

Ayrıca, arama teriminizin başında ve sonunda boşluk boşluklarını kırpmak için php'nin trim() işlevini kullanabilirsiniz. – VikingBlooded

cevap

2

Her şeyden önce, tam eşleşme için LIKE kullanmayın, tek bir eşit işareti kullanın (=).

İkincisi, ad ve soyadını birleştirmek CONCAT kullanabilirsiniz: Ne için ne olduğunu açıklamak vermedi beri

SELECT * FROM users 
WHERE concat(user_first_name,' ',user_last_name) = :term 
ORDER BY user_id LIMIT 10 

Ben son şartını user_business_address like :term kaldırıldı.

kullanıcı irade girişi ilk isim/soyadı veya tam adı ya, o zaman % joker ile LIKE operasyonu kullanabiliyorsa

:

SELECT * FROM users 
WHERE concat(user_first_name,' ',user_last_name) LIKE concat('%',:term,'%') 
ORDER BY user_id LIMIT 10" 

Here is a document on like operator.

+0

Harika! Teşekkür ederim ki çalışıyor! – Schwesi

1
SELECT * from users where user_first_name = SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 1), ' ', -1) , 
TRIM(SUBSTR(fullname, LOCATE(' ', fullname))) AS last_name FROM registeredusers 

sen substr, bulun substring_index vb ile yapabileceğiniz serin şeylerin bir demet bazı gerçek karışıklık için el kitabına bakın var. http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

+0

Cevabınız için teşekkür ederiz! Substr'a bir göz atacağım, vb. – Schwesi