Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Вывод с MySQL с условием

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую всех, нужна помощь в одной проблемке. И так,  есть БД в ней имеется таблица под названием bd_novostey в этой таблице много полей( заранее извиняюсь если не правильно что то излагаю ) так вот помимо установленного идентификатора id(AUTO_INCREMENT) есть ещё и cat_id к которому ставятся цифры или 1 или 2, так вот я хочу, что бы выводились все поля  где есть cat_id = 1, а у меня на данный момент выводятся полностью все поля с этой таблицы.
Вот код который у меня на странице
 

Код:
<div class="dxd_gorizontal">
<?
include '/counter/config_bd.php';
$num = 12;
$page = $_GET['page'];
$result = mysql_query("SELECT COUNT(*) FROM bd_novostey");
$temp = mysql_fetch_array($result);
$posts = $temp[0];
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$qwery = mysql_query("SELECT * FROM bd_novostey ORDER BY id  DESC LIMIT $start, $num");
$row = mysql_fetch_array($qwery);
do
{
   printf("
        <div class='horizontal-bigsquare-smallborder'>
        <ul class='bg-black txt-slideinleftRightAll'>
            <img src='".$row['img_src_vert_memu']."' />
            <div class='text'>
                <span>
                    <h1>".$row['title_vert_menu']."</h1>
                    <p>".$row['text_vert_menu']."</p>
                    <a class='button' target='_blank' href='".$row['author']."'>ОТКРЫТЬ</a>
                </span>
            </div>
        </ul>
    </div>
");
 
}
while($row = mysql_fetch_array($qwery));
?>
</div>
<?
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=Vertikal_noe_menju.htm>Первая</a>  <a href=Vertikal_noe_menju.htm?page='. ($page - 1) .'>Предыдущая</a>  ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = '  <a href=Vertikal_noe_menju.htm?page='. ($page + 1) .'>Следующая</a>  <a href=Vertikal_noe_menju.htm?page=' .$total. '>Последняя</a>';
 
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=Vertikal_noe_menju.htm?page='. ($page - 5) .'>'. ($page - 5) .'</a>  ';
if($page - 4 > 0) $page4left = ' <a href=Vertikal_noe_menju.htm?page='. ($page - 4) .'>'. ($page - 4) .'</a>  ';
if($page - 3 > 0) $page3left = ' <a href=Vertikal_noe_menju.htm?page='. ($page - 3) .'>'. ($page - 3) .'</a>  ';
if($page - 2 > 0) $page2left = ' <a href=Vertikal_noe_menju.htm?page='. ($page - 2) .'>'. ($page - 2) .'</a>  ';
if($page - 1 > 0) $page1left = '<a href=Vertikal_noe_menju.htm?page='. ($page - 1) .'>'. ($page - 1) .'</a> ';
 
if($page + 5 <= $total) $page5right = '  <a href=Vertikal_noe_menju.htm?page='. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = '  <a href=Vertikal_noe_menju.htm?page='. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = '  <a href=Vertikal_noe_menju.htm?page='. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = '  <a href=Vertikal_noe_menju.htm?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = '  <a href=Vertikal_noe_menju.htm?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
 
// Вывод меню если страниц больше одной
 
if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class='pagination'>                    
    <ul>
        <li>".$pervpage.$page5left.$page4left.$page3left.$page2left.$page1left."<span class='whitesquareactive'>".$page."</span>".$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage."</li>
    </ul>
</div>";
}
 
?>
</div>

 
Пробовал делать так
 
 

Код:
$qwery = mysql_query("SELECT * FROM bd_novostey ORDER BY cat_id = 1  DESC LIMIT $start, $num");

В таком случае выводятся все поля где есть cat_id = 1 просто впереди всех остальных
 
Пробовал так
$qwery = mysql_query("SELECT img_src_vert_memu, title_vert_menu, text_vert_menu, author  FROM bd_novostey ORDER BY cat_id = 1  DESC LIMIT $start, $num");
 
На этом мои мозги закипели))) недавно только начал разбираться в PHP и MySQL.
 
Вот вам для общего понимания таблица полностью

Код:
CREATE TABLE IF NOT EXISTS `bd_novostey` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'AUTO_INCRIMENT',
  `img_src_vert_memu` varchar(255) NOT NULL,
  `img_src_galereja` varchar(255) NOT NULL,
  `img_src_mini` varchar(255) NOT NULL,
  `img_src_mini_alt` text NOT NULL,
  `glav_kategorija` text NOT NULL,
  `title_vert_menu` text NOT NULL,
  `text_vert_menu` text NOT NULL,
  `img_src_gor_menu` varchar(255) NOT NULL,
  `title_gor_menu` text NOT NULL,
  `title_galereja` text NOT NULL,
  `text_gor_menu` text NOT NULL,
  `title_novost` text NOT NULL,
  `title_op_glav` text NOT NULL,
  `author` text NOT NULL,
  `text_galereja` text NOT NULL,
  `img_src_knopki` varchar(255) NOT NULL,
  `title_knopki` text NOT NULL,
  `text_knopki` text NOT NULL,
  `img_src_slaider` varchar(255) NOT NULL,
  `title_slaider` text NOT NULL,
  `text_slaider` text NOT NULL,
  `img_src_forma` varchar(255) NOT NULL,
  `title_forma` text NOT NULL,
  `text_forma` text NOT NULL,
  `img_src_shablon_html` varchar(255) NOT NULL,
  `title_shablon_html` text NOT NULL,
  `text_shablon_html` text NOT NULL,
  `shablon_html_vers` text NOT NULL,
  `img_src_shablon_wp` varchar(255) NOT NULL,
  `title_shablon_wp` text NOT NULL,
  `shablon_wp_vers` text NOT NULL,
  `text_shablon_wp` text NOT NULL,
  `cat_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=79 ;

 
Собственно вопрос как мне сделать что бы выводились все поля где указанно cat_id = 1?

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 05:50 17-04-2014 | Исправлено: Cheery, 21:15 17-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
В таком случае выводятся все поля где есть cat_id = 1 просто впереди всех остальных  

неправда, не может он выбрать "остальные".
 
ну и добавьте условие тогда и сюда

Цитата:
$result = mysql_query("SELECT COUNT(*) FROM bd_novostey");



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 05:54 17-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
$result = mysql_query("SELECT COUNT(*) FROM bd_novostey");

Пробовал и сюда
Тот же эффект, а вообще щас я вам скину прям то что сейчас попробую
 
Добавлено:
Делаю так

Код:
$num = 12;
$page = $_GET['page'];
$result = mysql_query("SELECT COUNT(*) FROM bd_novostey ORDER BY cat_id = 1");
$temp = mysql_fetch_array($result);
$posts = $temp[0];
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$qwery = mysql_query("SELECT * FROM bd_novostey ORDER BY cat_id = 1  DESC LIMIT $start, $num");
$row = mysql_fetch_array($qwery);
do
{
   printf("
        <div class='horizontal-bigsquare-smallborder'>
        <ul class='bg-black txt-slideinleftRightAll'>
            <img src='".$row['img_src_vert_memu']."' />
            <div class='text'>
                <span>
                    <h1>".$row['title_vert_menu']."</h1>
                    <p>".$row['text_vert_menu']."</p>
                    <a class='button' target='_blank' href='".$row['author']."'>ОТКРЫТЬ</a>
                </span>
            </div>
        </ul>
    </div>
");
 
}
while($row = mysql_fetch_array($qwery));

 
Результат тот же.

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 05:59 17-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxxZISxxx

Цитата:
ORDER BY cat_id = 1

WHERE cat_id = 1

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:05 17-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
WHERE cat_id = 1

Так в роди бы отсеялись, но разбило на две страницы так как стоит $num = 12; на второй странице где заканчивается cat_id = 1, выпало ещё 6 записей с cat_id = 2. Когда ставлю $num = 50;(как бы хочу что бы побольше вывелось) выводятся обратно все что есть. Когда не делал WHERE cat_id = 1 разбивало на 5 страниц.

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 06:17 17-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxxZISxxx

Цитата:
выпало ещё 6 записей с cat_id = 2

если записали WHERE cat_id = 1 (в обоих запросах), то не могут быть выбраны другие записи.
 

Цитата:
 Когда не делал WHERE cat_id = 1 разбивало на 5 страниц.

значит не так много записей с cat_id = 1

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:21 17-04-2014 | Исправлено: Cheery, 06:22 17-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
значит не так много записей с cat_id = 1

Записей в принципе одинаково
поставил $num = 10; Выпало левых всего 2, я прошу прощения там выводит не cat_id = 2 а вообще все пустые строки.Код сейчас такой

Код:
 
$num = 10;
$page = $_GET['page'];
$result = mysql_query("SELECT COUNT(*) FROM bd_novostey WHERE cat_id = 1");
$temp = mysql_fetch_array($result);
$posts = $temp[0];
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$qwery = mysql_query("SELECT * FROM bd_novostey ORDER BY cat_id = 1 DESC LIMIT $start, $num");
$row = mysql_fetch_array($qwery);
do
{
   printf("
        <div class='horizontal-bigsquare-smallborder'>
        <ul class='bg-black txt-slideinleftRightAll'>
            <img src='".$row['img_src_vert_memu']."' />
            <div class='text'>
                <span>
                    <h1>".$row['title_vert_menu']."</h1>
                    <p>".$row['text_vert_menu']."</p>
                    <a class='button' target='_blank' href=''>ОТКРЫТЬ</a>
                </span>
            </div>
        </ul>
    </div>
");
 
}
while($row = mysql_fetch_array($qwery));

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 06:40 17-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxxZISxxx
ну елки-палки, я же сказал - оба запроса правим.

Цитата:
SELECT * FROM bd_novostey ORDER BY cat_id = 1 DESC LIMIT $start, $num



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:42 17-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо заработало, это уже я глюконул, одним словом извиняюсь за трёп нервов)))
 
Добавлено:
Можно ли задействовать ещё и id? что бы выводилось все по последней добавленной записи

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 06:50 17-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxxZISxxx

Цитата:
что бы выводилось все по последней добавленной записи

не понимаю вопроса. можно все, но нужно понимать требования.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:59 17-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я это к тому что когда выводилось у меня по id а там стоит (AUTO_INCREMENT) то с таблицы выводилось таким образом, что когда я добавляю новую запись она выводится самой первой, за ней идут уде прошлые добавленные, теперь же я вывожу записи по cat_id = 1 и они выводятся в том порядке в котором я их записал, например создал я запись 2 дня назат она и будет выводится постоянно первой по списку, я же хочу что новые бы занесённые записи выводились первыми чем старые.

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 07:11 17-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxxZISxxx

Цитата:
$qwery = mysql_query("SELECT * FROM bd_novostey WHERE cat_id = 1 ORDER BY id DESC LIMIT $start, $num");  



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:17 17-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как сделать случайный вывод?

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 07:20 17-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxxZISxxx

Цитата:
А как сделать случайный вывод?

ORDER BY rand()
но это не рекомендуется для больших баз.
либо вот так, более оптимизированно http://stackoverflow.com/q/1244555/1164491
 
и в случайном выводе вы не сможете делать постраничный вывод, так как "случайность" будет разной при каждом новом запросе для новой страницы.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:24 17-04-2014 | Исправлено: Cheery, 07:25 17-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да это я для иного го дела интересуюсь)))
 
Добавлено:
Собственно спасибо за помощь! Вы свою репутацию заслуженно держите железной хваткой))

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 07:28 17-04-2014
CodeKeeper

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Офтоп:  
 
Спецом для адептов попова и иже с ними.  
 
цикл do...while очень специфический и задач с его использование можно пересчитать на пальцах левой руки. При чем он считается самым тормознутым.  
 
http://best-web-creation.com/articles/view/id/skorost-vipolneniya-tsiklov
 
intval и иже с ними пережиток прошлого. Сейчас используют это http://www.php.net/manual/ru/language.types.type-juggling.php
 
if(empty($page) or $page < 0)  по негласному соглашению принято вместо "or" писать "||"  
 
ф-я mysql_cinnect занесена в deprecated и в последующем времени будет нещадно выпилена в новых версиях php
http://au1.php.net/manual/ru/function.mysql-connect.php
 
В место нее используют более удобный PDO http://au1.php.net/manual/ru/ref.pdo-mysql.php
 
Ну или для мазохистов http://au1.php.net/manual/ru/function.mysqli-connect.php

Всего записей: 24 | Зарегистр. 28-12-2013 | Отправлено: 13:21 22-04-2014 | Исправлено: CodeKeeper, 13:25 22-04-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Вывод с MySQL с условием


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru