2011-10-25 1 views
0

同じ行の値と一致する結果のみを表示するように検索したい。フィールドの値が一致する検索結果のみを表示するようにします。これはどうですか?

私は2つの検索フィールドを持っている:

'検索' と '検索語'

私のデータベースのフィールド名は

名 姓 メールです

ですから、例えば:

i検索の場合

'search'に 'mike'、 'search term'に 'smith'を表示する必要があります。 'mike smith'と一致する結果が表示されます。

どのように達成されますか?

ありがとうございます!

ジェームズ

<?php 

$conn = mysql_connect("", "", ""); 



if (!$conn) { 
echo "Unable to connect to DB: " . mysql_error(); 
exit; 
} 

$search = addcslashes($search,'%_'); 
$searchterm = addcslashes($searchterm,'%_'); 

    $search = "%" . $_POST["search"] . "%"; 
$searchterm = "%" . $_POST["searchterm"] . "%"; 



if (!mysql_select_db("")) { 
echo "Unable to select mydbname: " . mysql_error(); 
exit; 
} 

$search = $_POST['search']; 
$searchterm = $_POST['searchterm']; 
$sql = "SELECT name,lastname,email 
FROM test_mysql 
WHERE name LIKE '%". mysql_real_escape_string($search) ."%'"; 
$result = mysql_query($sql); 


if (!$result) { 
echo "Could not successfully run query ($sql) from DB: " . mysql_error(); 
exit; 
} 

if(empty($_GET['search'])){ // or whatever your field's name is 
    echo 'no results'; 
}else{ 
    performSearch(); // do what you're doing right now 
} 

if (mysql_num_rows($result) == 0) { 
echo "No rows found, nothing to print so am exiting"; 
exit; 
} 


while ($row = mysql_fetch_assoc($result)) { 
echo '<br><br><div class="data1">'; 
echo htmlentities($row["name"]); 
echo '</div><br><div class="data2">'; 
echo htmlentities($row["lastname"]); 
echo '</div><br><div class="data3">'; 
echo htmlentities($row["email"]); 
echo '</div>'; 
} 

mysql_free_result($result); 

?> 
+0

この質問は面白い読み込みます。私はあなたがすでに簡単なANDステートメントを試したと思いますか? "%LIKE '%'。$ search。"% 'AND LIKE'% "。$ searchterm。"% "" - 両方の単語を要件にします。 –

+0

申し訳ありません私は非常にmysqlに新しいです私は昨日始めた。どのようにmysql_real_escape_string($ search)の周りにそれを適合させるのですか?私は構文を学んでいて、あなたがちょうど言ったものをレイアウトする方法がわからないのですか? – James

答えて

2

変更:

WHERE name LIKE '%". mysql_real_escape_string($search) ."%'"; 

へ:私はあなたのクエリに目を通すよう

WHERE name LIKE '%". mysql_real_escape_string($search) ."%' AND lastname LIKE '%". mysql_real_escape_string($search) ."%'"; 
+0

私が探していたことをありがとう!空のクエリが送信されたときに、すべてのデータベースの結果を返す検索を停止するにはどうすればよいですか? – James

+0

コードを実行する前に$ searchと$ searchterm変数をチェックします: 'if($ search === '' && $ searchterm === ''){...ここで何か...} else { } '。人々がすべてにマッチする%記号で送信できることを覚えておいてください。それがあなたにとって問題であるかどうかはわかりません。 – Ariel

+0

ああ、どうすれば止めることができますか? '%'を送信するとすべてを返すことはできません – James

1
$sql = "SELECT name,lastname,email 
FROM test_mysql 
WHERE name LIKE '%". mysql_real_escape_string($search) ."%' 
AND name LIKE '%". mysql_real_escape_string($searchterm) ."%'"; 

また、あなたが最後の名前と照合検討する必要があります同じように。あなたの例は、姓と名を探しているかもしれないと示唆しましたが、クエリは単に名前を比較しています。

検索可能なテーブルに「検索」というフィールドを作成し、フルテキストインデックスとして設定することが多いので、より強固な検索オプションとしてmysqlの一致を使用することができます。

http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

私は戦について学んだ前に、それは私のPHPの開発にしばらくいました。早期に知っていることは確かに有益でした。それが役に立てば幸い。

+0

ちょうど私が必要とした答え!空のクエリが送信されたときに、すべてのデータベースの結果を返す検索を停止するにはどうすればよいですか? – James

+0

処理前の条件文です。 if(!_PRO ['search'])){あなたのコードはここにあります} ...しかし、PHPトリム($ _ POST ['search'])を使って、もっと複雑なものにしたいかもしれません。スペース。またはstrlen($ _ POST ['search'])を使用して、複数の文字であることを確認してください。 –

+0

ありがとう、あなたがmysql初心者を助けると知っている良いサイトはありますか? – James

1

変更:

$search = addcslashes($search,'%_'); 
$searchterm = addcslashes($searchterm,'%_'); 

$search = "%" . $_POST["search"] . "%"; 
$searchterm = "%" . $_POST["searchterm"] . "%"; 

するには:あなたの例では、$の検索語で何もしていないので

$search = "%" . addcslashes($_POST["search"],'%_'). "%"; 
$searchterm = "%" . addcslashes($_POST["searchterm"],'%_'). "%"; 
+0

ありがとうアリエル!私は本当にあなたの助けに感謝します。検索フィールドでhttp://www.weezy.co.uk/newresults.php検索 '%'を確認してください。なぜ右の列は消えますか? – James

+0

「行が見つかりませんでしたので、何も印刷されませんので、終了しています」 - つまり、行表示をスキップするのではなく終了しました。 – Ariel

+0

ああ、ありがとう、私はその部分を取り除き、今は正常に動作します。私が直面しているもう一つの問題は、空の検索が提出されたときに結果が表示されないようにするのが難しいことです。私はサンプルを使用しましたが、実際にそれを動作させる方法がわかりません – James

関連する問題