как выбрать из 2х таблиц данные

Тема в разделе "PHP", создана пользователем асс, 14 мар 2009.

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

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    есть таблица news имеет поля id, title, catid
    id= индетификатору новости
    title=названию новости
    catid= номеру категории из таблицы category

    есть таблица category имеет поля catid cat_title
    вот полностью таблица категорий
    HTML:
    
                catid    title_cat	     
                1	политика	 
                2	новости	news
                3	интернет	 
               12	Сегодня	          
    Задача выбрать новости из конкретной категории


    пробую так
    PHP:
    $Q1 mysql_query("SELECT * FROM news,category WHERE   category.catid=1  ORDER BY news.id DESC LIMIT $start,$per_page"); 
    В общем как только не пробовал если указываю не существующую категорию то новостей нет,как и положено.

    Если указываю категорию которая есть например Интернет
    выводяться новости из всех категорий.

    Перерыл форумы но так и не нашел информации.

    Если не трудно подскажите где ошибка. как выбрать данные из конкретной категории.

    Сделал так, работает.
    $Q1 = mysql_query("SELECT * FROM news,category WHERE news.catid=category.catid and category.catid=12 LIMIT $start,$per_page");

    В общем как выбрать новости я разобрался но проблемма в том что на морде выводятся новости только из указаной категории

    А вот как их выбрать все если категория не указана явно?

    вот запрос который выводит новости из категории 1
    $Q1 = mysql_query("SELECT * FROM news,category WHERE news.catid=category.catid and category.catid='1' LIMIT $start,$per_page");


    Я пробовал убрать из выражения WHERE все условие и втсавить только id
    Но тут другая проблемма, если новостей всего одна то она повториться 20 раз из за Пейджера
    та как пейджер разбивает страницу по 20 новостей и имеет LIMIT $start,$per_page")
    где $per_page = 15; // Кол-во записей на страницу
     
  2. Acidrayne

    Acidrayne

    Регистр.:
    30 сен 2007
    Сообщения:
    296
    Симпатии:
    20
    Не совсем понял что там у вас за пейджер но думаю вам придется переделывать его!

    Вот запрос который выведет все новости:

    PHP:
    $result mysql_query("SELECT * FROM news,$db");
    $myrow mysql_fetch_array ($result);
    Потом думаю нужно избавиться от вашего пейджера и начать выводить все с помощью цикла:

    PHP:
    do{
    echo  
    $myrow["title"];
    echo  
    $myrow["news"]; (тут не понятно ваша таблицачтоне имеет поля с текстом новости ?)

    }
     while (
    $myrow mysql_fetch_array ($result);); # Условие для выполнения цикла (Пока в массиве $result есть новости выводим их)



     
  3. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    используй LEFT JOIN.
     
  4. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    имеет новости но я не стал ее кидать чтоб проще было.

    вот точно такой пагинатор http://www.kiber-zona.org/index.php?showtopic=3504

    Сейчас проверил,оказываеться тут проблемма в дргуом
    ВОт такой запрос выдает ошибку
    $Q1 = mysql_query("SELECT * FROM news,category WHERE id LIMIT $start,$per_page");

    такйо запрос не выдает ошибку

    $Q1 = mysql_query("SELECT * FROM news WHERE id LIMIT $start,$per_page");

    но из него удален запрос category на выборку из таблицы категории
    FROM news,category


    ВОт причина в нем. Потому как скорее всего запрос $Q1 = mysql_query("SELECT * FROM news,category WHERE id and news.catid=category.catid and category.catid='".$cat."' LIMIT $start,$per_page");

    сотавлен не верно.

    Мне надо выводить все новости если урл имеет вид site.ru.

    А если урл имеет вид site.ru/?catid=1 то выводить только из категории 1
     
  5. Acidrayne

    Acidrayne

    Регистр.:
    30 сен 2007
    Сообщения:
    296
    Симпатии:
    20
    Тогда сделайте так:

    PHP:
    if(isset ($_GET['catid']))  // Если переменная "catid" существует тогда выводим из базы уроки. где категория равна "catid"
                                            
                                                                           
    $Q1 mysql_query("SELECT * FROM news WHERE id = '$_GET["catid"]'");
    }

    else                                         
    // если "catid" нет, тогда выводим все уроки
     

    $Q1 mysql_query("SELECT * FROM news ");
    }
     
    асс нравится это.
  6. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Сделал так
    PHP:
    if($_GET['id']=='') {
     
    $cat =$_GET['catid'];
    if(
    $cat!=''){

      
    $Q1 mysql_query("SELECT * FROM  news,category WHERE  id  and news.catid=category.catid and category.catid='".$cat."' LIMIT $start,$per_page");
     }else{
     
    $Q1 mysql_query("SELECT * FROM   news  WHERE    id     LIMIT $start,$per_page");
     }
    Все работает правильно . Хотя конструкция очень большая.
    теперь если if($cat!='') пустой значит выводим все новости которые идут после else.
    А если он содержит значение то выводим
    все что до else

    Acidrayne У вас тоже самое только у вас проверяеться переменная catid ,если не ошибаюсь. У меня значение переменной catid
     
  7. Acidrayne

    Acidrayne

    Регистр.:
    30 сен 2007
    Сообщения:
    296
    Симпатии:
    20
    Все правильно я просто писал исходя их вашей просьбы, если переменная существуюет - выводим все новости где переменная равнакатегории, а если переменной нету тогда выводим все новости! Вообщем можно и так и так просто я думаю что мой код будет более правильным! Если брать ваш од тогда делайте так:

    PHP:
    if (isset($_GET['catid'])){$catid $_GET['catid']; if($catid == ''){unset($catid); }} // если переменная "catid" равна 0 - тогда уничтожаем ее
     
Статус темы:
Закрыта.