как сделать поиск по бд из разных таблиц с одинаковыми полями

Тема в разделе "Базы данных", создана пользователем Crimso13, 31 авг 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Crimso13

    Crimso13 Создатель

    Регистр.:
    10 авг 2008
    Сообщения:
    10
    Симпатии:
    2
    вообщем есть 2 таблицы с повторяющимися полями как сделать по ним поиск я написал примерно так
    $result = mysql_query("SELECT id,tittle,des,date,author,mini_img,view,DATE_FORMAT(date,'%d.%m.%Y') AS date1 FROM data WHERE (text LIKE '%$search%' ) OR (des LIKE '%$search%')ORDER BY date DESC",$db);
    $result2= mysql_query("SELECT id,tittle,des,date,author,mini_img,view,DATE_FORMAT(date,'%d.%m.%Y') AS date1 FROM prog WHERE (text LIKE '%$search%' ) OR (des LIKE '%$search%')ORDER BY date DESC",$db);
    if (!$result or !$result2)
    {
    echo ("запрос в базу не прошел");
    exit(mysql_error());
    }
    if (mysql_num_rows($result ) <0 or mysql_num_rows($result2) <0 )

    {echo "в таблице нет данных" ;
    exit();
    }
    if (mysql_num_rows($result) >0 or mysql_num_rows($result2) >0 )
    {
    $myrow = mysql_fetch_array($result);
    $myrow2 = mysql_fetch_array($result2);

    if (isset ($result)) {
    do {
    printf("<table align='center' class='post'>
    <tr>
    <td class='post_tittle'><p class='post_name'><img class='mini' alighn='left' src='%s'><a href='view_post.php?id=%s' >%s </a></p>


    <p class='post_adds'>дата добавления: %s</p>

    <p class='post_adds' >автор урока: %s</p></td>
    </tr>
    <tr>
    <td>%s<p class='post_view'>просмотров: %s</p></td>
    </tr> </table><br><br>",$myrow["mini_img"],$myrow["id"],$myrow["tittle"],$myrow["date1"],$myrow["author"],$myrow["des"],$myrow["view"] );
    }
    while ($myrow=mysql_fetch_array($result));
    }
    if (isset ($result2)) {
    do {
    printf("<table align='center' class='post'>
    <tr>
    <td class='post_tittle'><p class='post_name'><img class='mini' alighn='left' src='%s'><a href='view_prog.php?id=%s' >%s </a></p>


    <p class='post_adds'>дата добавления: %s</p>

    <p class='post_adds' >автор урока: %s</p></td>
    </tr>
    <tr>
    <td>%s<p class='post_view'>просмотров: %s</p></td>
    </tr> </table><br><br>",$myrow2["mini_img"],$myrow2["id"],$myrow2["tittle"],$myrow2["date1"],$myrow2["author"],$myrow2["des"],$myrow2["view"]);
    }


    while ($myrow2=mysql_fetch_array($result2));
    }

    }

    ?>


    но получается если слова есть там и там то все нормально а если встречается только в одной таблице то выводит пустое место
    как сделать чтобы выводилось нормально
     
  2. ip027

    ip027 Создатель

    Регистр.:
    19 фев 2007
    Сообщения:
    22
    Симпатии:
    7
    для начала пост правильно оформь, не очень удобно разбираться в тексте...
     
  3. everest

    everest

    Регистр.:
    20 дек 2006
    Сообщения:
    197
    Симпатии:
    20
    Ну во первых

    if (mysql_num_rows($result ) <0 or mysql_num_rows($result2) <0 )
    {echo "в таблице нет данных" ;
    exit();
    }

    - будет истимым если первое ИЛИ второе условие <0, а нужно наверное использовать И (and)

    и я кстати всегда каждое из условий беру в скобки...
     
  4. sotee

    sotee Создатель

    Регистр.:
    10 июл 2008
    Сообщения:
    17
    Симпатии:
    5
    Правильнее будет объединить эти данные в запросе, чем писать 2 раза один и тот же код

    PHP:
    $result mysql_query("(SELECT id,tittle,des,date,author,mini_img,view,DATE_FORMA T(date,'%d.%m.%Y') AS date1 FROM data WHERE (text LIKE '%$search%' ) OR (des LIKE '%$search%')) UNION (SELECT id,tittle,des,date,author,mini_img,view,DATE_FORMA T(date,'%d.%m.%Y') AS date1 FROM prog WHERE (text LIKE '%$search%' ) OR (des LIKE '%$search%')) ORDER BY date DESC",$db);
    Синтаксис оператора UNION
    http://www.mysql.ru/docs/man/UNION.html
     
  5. Crimso13

    Crimso13 Создатель

    Регистр.:
    10 авг 2008
    Сообщения:
    10
    Симпатии:
    2
    С этим все понятно а если поля разные и количество полей разное то как сделать запрос
     
  6. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Объединение таблиц или JOIN.
     
  7. xorbit

    xorbit Постоялец

    Регистр.:
    13 июн 2007
    Сообщения:
    105
    Симпатии:
    90
  8. Crimso13

    Crimso13 Создатель

    Регистр.:
    10 авг 2008
    Сообщения:
    10
    Симпатии:
    2
    что то не получается пишу вот так
    $result = mysql_query("SELECT data.id,data.tittle,data.des,data.date,data.author,data.mini_img,data.view,DATE_FORMAT(data.date,'%d.%m.%Y') AS date1,prog.id,prog.tittle,prog.des,prog.view,prog.date,prog.mini_img,prog.url,prog.author,DATE_FORMAT(prog.date,'%d.%m.%Y') AS date1 FROM data JOIN prog WHERE (data.text LIKE '%$search%' ) OR (data.des LIKE '%$search%') OR (prog.text LIKE '%$search%' ) OR (prog.des LIKE '%$search%') ORDER BY data.date OR prog.date DESC",$db);
    выводит только из второй таблицы и по несколько раз
    как правильно написать запрос
     
Статус темы:
Закрыта.