جستجو چند فیلد در دو تیبل مختلف

plague

Member
جستجوی متنی در چند فیلد و دو تیبل مختلف

سلام
من میخام یه سرچ برای یه سایت بسازم که
این سرچ قراره روی 2 تیبل news , download اعمال بشه
این دوتا کلیک خارجی ندارن ولی یه فیلد مشترک به اسمtitle دارن که من میخام این رو به دست بیارم
این کوئری جواب نمیده و معلوم نیست چی برمیگردونه


کد:
        $sql="SELECT download.title, news.title FROM download,news WHERE download.title OR news.title OR news.text LIKE '%$search%' ";
یه مورد دیگه اینکه از کجا میتونیم بفهمیم نتیجه برگشتی ماله کدوم تیبله ؟
 

ziXet

مدیر انجمن PHP/MYSQL
سلام
من میخام یه سرچ برای یه سایت بسازم که
این سرچ قراره روی 2 تیبل news , download اعمال بشه
این دوتا کلیک خارجی ندارن ولی یه فیلد مشترک به اسمtitle دارن که من میخام این رو به دست بیارم
این کوئری جواب نمیده و معلوم نیست چی برمیگردونه


کد:
        $sql="SELECT download.title, news.title FROM download,news WHERE download.title OR news.title OR news.text LIKE '%$search%' ";
یه مورد دیگه اینکه از کجا میتونیم بفهمیم نتیجه برگشتی ماله کدوم تیبله ؟
سلام

شما نباید OR رو به اون صورت به کار ببرید!
درستش اینه:
PHP:
 $sql="SELECT download.title, news.title FROM download,news WHERE download.title LIKE '%$search%' OR news.title LIKE '%$search%' OR news.text LIKE '%$search%' ";
 

plague

Member
ممنون , نمیشه فهمید از کدوم تیبل اومده ؟

اینم تو یه سایت خارجی پیدا کردم

add fulltext indexes to all of the string columns in all of those tables, then union the results
select * from table1 where match(col1, col2, col3) against ('some string')
union all
select * from table2 where match(col1, col2) against ('some string')
union all
select * from table3 where match(col1, col2, col3, col4) against ('some string')
...
 

plague

Member
سلام

شما نباید OR رو به اون صورت به کار ببرید!
درستش اینه:
PHP:
 $sql="SELECT download.title, news.title FROM download,news WHERE download.title LIKE '%$search%' OR news.title LIKE '%$search%' OR news.text LIKE '%$search%' ";
من این کد رو اینطوری که شما فرموندین اصلاح کردم
از این کد هم برای نمایش نتایج استفاده میکنم
PHP:
while ($row = mysql_fetch_assoc($result)) {
    echo $row['title'] ."<br/>";
}

الان مشکل اینه که فقط نتایج یک تیبل رو نشون میده اونم تیبلی که توی کد دوم اومده مثلا

$sql="SELECT download.title, news.title FROM
الان نتایج جستجو توی هر تیبلی باشه به ازای اونها از تیبل news.title درمیاره ونشون میده
مثلا اگه ماله خوده NEWS باشن بدونه مشکل جستجو انجام میشه ولی اگه نتایج توی تیبل دیگه باشن باز هم از NEWS میکشه بیرون و نشون میده

اگه جای تیبل ها رو توی کد برعکس کنم نتیجه برعکس میشه
 

poomaka

New Member
سلام دوستان من هم مشکلم در همین رابطه است .در واقع می خوام بر اساس دو ورودی جستجو انجام بده که در صفحه اصلیم این برنامه رو نوشتم
<form action="search.php" method="get">
<fieldset>
<table>
<tr>
<td> name:</td>
<td><input name="tag" type="text" id="tag" size="15"/></td>
</tr>
<tr>
<td> sys_name: </td>
<td><input sys_name="tag" type="text" id="tag" size="15"/></td>
</tr>
<tr>
<td>month:</td>
<td><input month="tag" type="int" id="tag" size="15"/></td>
</tr>
<tr>
<td>day:</td>
<td><input day="tag" type="int" id="tag" size="15"/></td>
</tr>
<tr><td>&nbsp;</td>
<td><input type="submit" value="search" /></td>
</tr>
</table>
</fieldset>
</form>


</form>​
ولی برنامه صفحه search.php رو بلد نیستم .لطفا کمکم کنین
 
آخرین ویرایش:

hassancd

Active Member
شما میتونید از دستور union

PHP:
SELECT title,tr FROM download WHERE title REGEXP '$search'' union SELECT title,tr FROM news WHERE title REGEXP '$search'
برای فهمیدن اینکه از کدوم جدول هست یک فیلد به نام tr بذار با مقادیر 1برای دانلود و صفر برای نیوز و تشخیص بده که از کدوم جدوله هنگام چاپ
لازم به ذکره اگه خواستی گزینه های دیگه ای رو هم سرچ کنی و شرط بذاری یک or بذار و ادامه بده
 

جدیدترین ارسال ها

بالا