Търсене в две таблици .

RiddleR

Registered
Добро утро пичове, мъчих се ама до резултат не стигнах.
Проблема е следния, имаме две таблици, novini и prog как да стане, та като напишеш в търсачката нещо, да търси и в двете?

Използвам следния код за да търся:

Код:
<?php
if(isset($_GET['search']))
{
$duma = htmlspecialchars($_GET['duma']);
if($duma == NULL)
{
echo "<p>Не сте въвели критерии за търсене!</p>";
}
else{
if(strlen($duma) < 3)
{
echo "<p>Търсачката не възприема думи по малки от 2 символа!</p>";
}
else{
$query = mysql_query("SELECT * FROM novini WHERE ime LIKE '%$duma%' OR novi LIKE '%$duma%'") or die (mysql_error());
$queryBroi = mysql_num_rows($query);
if($queryBroi == 0)
{
echo "<p>Няма разултати от вашето търсене! Опитайте с други критерии!</p>";
}else{

echo"Резултати от търсенето:<br>
<form action='search.html' method='get'> 
<input type='text' name='duma' value='$duma' size='30'  />
<input type='submit' name='search' value='Давай' /> 
</form> ";

while($rowQ = mysql_fetch_assoc($query))
{


$id = $rowQ['id'];
$ime = $rowQ['ime'];
$snimk = $rowQ['snimk'];
$novi = $rowQ['novi'];

echo "
                             
                            
                            <h1><a href='news$id.html'>$ime</a></h1>
<p><img src='$snimk' class='imgl' title='$ime' width='200' />";

$text = $novi; 
sakra6tenie($text,30,"... <br />"); 




echo "
</p>
 <br class='clear' />
     
";


}
}
}
}
}
?>
 
[sql]SELECT * FROM
`novini` as `n`, `prog` as `p`
WHERE
`n`.`ime` LIKE '%$duma%' OR
`n`.`novi` LIKE '%$duma%' OR
`p`.`red_v_tablica_prog` LIKE '%$duma%' OR
`p`.`red_v_tablica_prog` LIKE '%$duma%' [/sql] :?:
 
joTunkiq каза:
[sql]SELECT * FROM
`novini` as `n`, `prog` as `p`
WHERE
`n`.`ime` LIKE '%$duma%' OR
`n`.`novi` LIKE '%$duma%' OR
`p`.`red_v_tablica_prog` LIKE '%$duma%' OR
`p`.`red_v_tablica_prog` LIKE '%$duma%' [/sql] :?:
Тази заявка ще върне нещо като

ime | novina | ime |novina
..... | .......... | ..... | ........
и т.н., като първите две колони ще са с резултати от първата таблица, а останалите - от втората. Тогава възниква точно този проблем с неудобното изкарване - ще имаш на един ред два резултата. Ами ако по време на цикъла резултатите от news свършат и останат само от prog? Ще трябва да правиш проверки и за това.

По-лесно е да използваш две заявки - една за news и една за prog.
Може да ги обединиш в една заявка, само че трябва да внимаваш да имаш еднакъв брой колони и от двете таблици. Пример:

[sql](select id, content from news where content like "%$duma%")
union
(select id, content from prog where content like "%$duma%")
[/sql]
и да си добавиш необходимите неща във where клаузата.

Тази заявка можеш просто да я сложиш на мястото на старата и ще получиш резултатите и от двете таблици.
 
RiddleR каза:
Проблема е, че както се вижда при novini търси в ime и novi, а при prog имам ime и poq
Тогава го направи така:

[sql](select id, ime, novi from novini where ime like "%$duma%" or novi like "%$duma%")
union
(select id, ime, poq from prog where ime like "%$duma%" or poq like "%$duma%")
[/sql]

Ще можеш да вземеш резултатите чрез $row['ime'] и $row['novi'], въпреки че във втората таблица едната колона се казва poq, а не novi.
 
криво ляво, с една проверка за снимка оправих нещата, защото аз трябва да изкарвам и линковете, обаче нали се сещаш, че когато ми открие нещо от prog линка към нещото е друг, а в prog няма снимки, тоест ако няма снимка да е prog, а ако има да е novini :)
 

Back
Горе