php ile birden fazla sorgu mysql

2 Cevap php

Ben birinin adı için bir arama sonucu 'ilk' ad ve soyad sonra her alanına karşı her arama patladı olması için çalışıyor ve 'son' duyuyorum.

Ama ne o patladı ve ilk sütun ve son sütun karşı adlarının her arayacaktır James David Smith = = $ gibi ilk geçen midle isim için birisi arama eğer odayı terk etmek gerekir. Örtmek kullanıcı adı soyad ilk girişler veya bir orta adını ekler.

İşte ben şimdiye kadar ama im sıkışmış ne var. Yardım. Lütfen.

<?

$search = explode(' ', $who);

$limit=verify($get['page'])?" limit ".($get['page']*10).",10":" limit 10";

$q="select * from users where (first IN('%$search[]%') or last IN('%$search[]%') or full_name LIKE '%".$get['who']."%') AND (city LIKE '%".$get['where']."%' or province LIKE '%".$get['where']."%') order by province";        

$rows=get_recordset($q);

if(count($rows)){
    foreach($rows as $row){

echo $q;

?>

2 Cevap

Ben ne demek olduğunu bile seni aldım ama emin değilim:

When you have 3 names then - (ilk, son, tamadın) üç alanlara karşı tüm isimleri kontrol.

When you have only 2 names then - son alanına karşı birinci alanda ve soyadı karşı ilk adını kontrol

o zaman bu halletmek gerekir:

$search = explode(' ', $who);
if (count($search) >2) { // in case we do got a middle name - 
    $whereNameStringsArr = array();
    foreach ($search as $val) {
    	$whereNameStringsArr[] =  " first LIKE '%$val%' 
    					OR last LIKE '%$val%' 
    					OR full_name LIKE '%$val%' ";
    }
    $whereNameClause = implode(" OR ",$whereNameStringsArr);
} else { // in case we don't got a middle name
    $whereNameClause =  " first LIKE '%{$search[0]}%' 
    			OR last LIKE '%{$search[1]}%' ";
}
$limit=verify($get['page'])?" limit ".($get['page']*10).",10":" limit 10";
$q="select * from users where  ($whereNameClause) 
    			AND (city LIKE '%".$get['where']."%' or province LIKE '%".$get['where']."%') 
    			order by province
    			$limit";        

$rows=get_recordset($q);
....

Tabii - emin Eğer kullanıcı girişinden almak all veri doğrulama yapmak

Peki neden bulanık bir arama yapmak değil mi? Verileri patlayabilir zaman, böyle bir şey yapın:

$name = $_POST['name'] // John Michael Smith

$first_name = substr($name, 0, strrpos($name, ' ')); //Returns everything before last space, ie John Michael

$last_name = strstr($name, ' '); //Returns everything after first space, ie John Michael

Şimdi sadece mysql sorgusu çalıştırmak, ancak BULUP kullanarak yukarıdaki değerleri (arama substring) içeren bir şey aramak için ayarlayın:

$results = mysql_query("SELECT * FROM names 
                WHERE LOCATE(firstname, '$first_name') > 0 OR 
                      LOCATE(lastname, '$last_name')   > 0
                ORDER BY lastname

Ben sonuçları ile ne bildiğinizi varsayıyorum edeceğiz.


Kullanıcıların Soyadı Adı Ortadan girerek, ya da ne var konusunda endişeleriniz varsa Hızlı Update, her zaman üstünde kullanabilirsiniz ama bir bütün dize bulmak yapabilirsiniz:

$results = mysql_query("SELECT * FROM names 
                WHERE LOCATE(firstname, '$name') > 0 OR 
                      LOCATE(lastname, '$name')   > 0
                ORDER BY lastname

Bu dize herhangi birinin örnekleri için iki sütunu kontrol edecektir. Muhtemelen (haklı olarak zaten önerildiği gibi, dize sterilize sonra) de birisi, geçen birinci ya da ne var giren durumda herhangi bir virgül (ama değil tire) kaldırmanız gerekir. boşluk ile değiştirin ve sonra çift emin olmak için bir alana tüm multi-boşlukları azaltır.


Bunun için üzgünüm. Burada adları (boşluklarla) bölünmüş yoldur. Orada benim substr sözdizimi ile ilgili bir sorun olarak:

 $name = $_POST['name'] // John Michael Smith

 $first_name = substr($name, 0, strrpos($name, ' ')); //Returns everything before last space, ie John Michael

 $last_name = strstr($name, ' '); //Returns everything after first space, ie John Michael