Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » запрос к базе данных

Ответить
Настройки темы
запрос к базе данных

Старожил


Сообщения: 359
Благодарности: 6


Конфигурация

Профиль | Отправить PM | Цитировать


как мне сделать запрос к базе данных ?

есть поле в таблице с категориями когда продукт в одной категории то выводит её нормально когда в нескольких то не выводит не в одной
в несколько добавляет через запятую

PHP код: Выделить весь код

$san_top10[8]=10 ;


$sql $db->query("SELECT * FROM " PREFIX "_post WHERE approve='1' AND category IN($san_top10[8]) AND id NOT IN ($san_top10[9]) $datag $imgs ORDER BY $san_top10[10] LIMIT 0,$san_top10[4]"); 

если в базе поле категории == 10,34,56 то продукты из 10 не выводит

Зыы.. подозреваю что это просто но не могу правильный запрос к гууглу задать

Отправлено: 02:35, 12-09-2011

 

Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


слабо понятно, что нужно.

вероятно перед этим запросом нужно найти ид, которые во многих категориях, чтобы их исключить...
Цитата binders:
если в базе поле категории == 10,34,56 »
т.е. если поле содержит список через запятую, то FIND_IN_SET для поиска значения в этих полях...

Отправлено: 09:53, 12-09-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 280
Благодарности: 54

Профиль | Отправить PM | Цитировать


примеры таблиц(ы) в студию!

-------
carpe diem


Отправлено: 12:20, 12-09-2011 | #3


Старожил


Сообщения: 359
Благодарности: 6

Профиль | Отправить PM | Цитировать


есть модуль вывода 10 последних продуктов

если продукт в нескольких категориях то его не выводит не в одной

в каких категориях продукт если он во многих категориях их эти категории записывает в базу через запятую

надо чтоб в каждой категории показывался этот продукт если даже он прописан в нескольких и чтоб в каждой категории были продукты только из своей категории



вот модуль целиком


PHP код: Выделить весь код

if(!defined('DATALIFEENGINE'))

{
  die(
"Hacking attempt!");
}
require_once(
ENGINE_DIR.'/data/config.top10.php');
$san_top10=unserialize($san_dbt);
$top10news dle_cache("top10news"$config['skin']);

$shab '#http:.{20,100}(\.jpg|\.jpeg|\.gif|\.png)#i';

$now date ('Y-m-d H:i:s'$_TIME);
$imgs="";
if (isset(
$san_top10[6]))
$imgs=" AND (short_story LIKE '%src=%' OR xfields LIKE '%src=%' OR full_story LIKE '%src=%')";
$datag=" AND date >= '$now' - INTERVAL ".$san_top10[3]." DAY AND date < '$now'";
if (
$san_top10[3]==0$datag="";

//Раскомментируй текст ниже (удали /* и */) если хочешь чтоб модуль вибирал новости только из категории, в которой находится юзер.

/* 
$notcat='2|33';    //В каких категориях выводить новость как на главной, разделять обязательно знаком | !!!
if ($category_id AND !preg_match('/('.$notcat.')/', $category_id)) {
$san_top10[8]=$category_id; 
// $san_top10[10]='(news_read+comm_num) DESC';    //В этой строчке меняется тип сортировки на (просмотры+комментарии). По желанию, эту строчку можно удалить (закомментировать) или отредактировать если знаешь что пишешь.
}
// echo"$category_id";
 */
if (!isset($san_top10[0]))
  
$sql $db->query("SELECT * FROM " PREFIX "_post WHERE approve='1' AND category IN($san_top10[8]) AND id NOT IN ($san_top10[9]) $datag $imgs ORDER BY $san_top10[10] LIMIT 0,$san_top10[4]");
else
  
$sql $db->query("SELECT * FROM " PREFIX "_post WHERE approve='1'  AND id NOT IN ($san_top10[9]) $imgs ORDER BY date ASC LIMIT 0,$san_top10[4]");

while (
$row $db->get_row($sql)) {

$row['category'] = intval ($row['category']);
$row['date'] = strtotime($row['date']);
if (
$config['allow_alt_url'] == "yes") {
    if (
$row['flag'] AND $config['seo_type']) {
        if (
$row['category'] AND $config['seo_type'] == 2) {
            
$full_link $config['http_home_url'].get_url($row['category'])."/".$row['id']."-".$row['alt_name'].".html";
        } else {
            
$full_link $config['http_home_url'].$row['id']."-".$row['alt_name'].".html";
        }
    } else {
        
$full_link $config['http_home_url'].date('Y/m/d/'$row['date']).$row['alt_name'].".html";
    }
} else {
    
$full_link $config['http_home_url']."index.php?newsid=".$row['id'];
}

$xfieldsdata xfieldsdataload$row['xfields'] );
$image=$xfieldsdata['poster'];
if (
$image==''
{

preg_match($shab$row['short_story'], $image);
$image=$image[0];
}
if (
$image==''
{
preg_match($shab$row['xfields'], $image);
$image=$image[0];
}
if (
$image==''
{
preg_match($shab$row['full_story'], $image);
$image=$image[0];
}
if (
$image==''$image="{THEME}/images/".$san_top10[7];
if (
$row['rating']==0$row['rating']=1;
if (
$row['vote_num']=='0'$row['vote_num']=1;
$row['title']=preg_replace("/'/","`",$row['title']);
$row['title']=preg_replace('/"/',""",$row['title']);
$rate='Рейтинг: <b>'.round($row['rating']/($row['vote_num']),2).'</b>';
$read='Просмотрело: <b>'.$row['news_read'].'</b> чел.';

if (!
$row['category']) { $my_cat "---"$my_cat_link "---";} else {
    
$my_cat = array (); $my_cat_link = array ();
    
$cat_list explode (','$row['category']);
    if (
count($cat_list) == 1) {
        
$my_cat[] = $cat_info[$cat_list[0]]['name'];
        
$my_cat_link get_categories ($cat_list[0]);
    } else {

        foreach (
$cat_list as $element) {
            if (
$element) { $my_cat[] = $cat_info[$element]['name']; if ($config['ajax']) $go_page "onclick=\"DlePage('do=cat&category={$cat_info[$element]['alt_name']}'); return false;\" "; else $go_page "";
                    if (
$config['allow_alt_url'] == "yes")
                            
$my_cat_link[] = "<a {$go_page}href=\"".$config['http_home_url'].get_url($element)."/\">{$cat_info[$element]['name']}</a>";
                    else
                            
$my_cat_link[] = "<a {$go_page}href=\"$PHP_SELF?do=cat&category={$cat_info[$element]['alt_name']}\">{$cat_info[$element]['name']}</a>";
            }
        }
    
$my_cat_link implode (', '$my_cat_link);
       }
    
$my_cat implode (', '$my_cat);
}
$elt++;
$nline="";
if (
$elt>=$san_top10[5]) {$nline="<br>"$elt=0;}

create_cache("top10news"$top10news);
$tpl->load_template('top10_blog.tpl');
$tpl->set('{category}'$my_cat);
$tpl->set('{title_cut}'substr($row['title'],0,$san_top10[1]));
$tpl->set('{title}'substr($row['title'],0,$san_top10[2]));
$tpl->set('{href}'$full_link);
$tpl->set('{image}'$image);
$tpl->set('{rate}'$rate);
$tpl->set('{news_read}'$read);
$tpl->set('{descr}'$row['descr']);
$tpl->set('{newline}'$nline);
$tpl->compile('top10news');
$tpl->clear();
}
$db->free(); 


Отправлено: 17:06, 12-09-2011 | #4


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


все равно мутно как-то

...AND `category` = '10' // элементы только одной категории 10
...AND FIND_IN_SET(10, `category`) // все элементы с категорией 10, включая с одной.

Отправлено: 18:04, 12-09-2011 | #5


Старожил


Сообщения: 359
Благодарности: 6

Профиль | Отправить PM | Цитировать


не получилось
Цитата Sham:
...AND FIND_IN_SET(10, `category`) // все элементы с категорией 10, включая с одной. »
попробую объяснить по другому

есть фильм он относится к нескольким категориям ( триллер, драма, военный, биография )
триллер == категория = 1
драма == категория = 2
военный == категория = 3
биография == категория = 4

при добавлении его в базу в графе категория прописывается следующее ( 1,2,3,4 )

при работе модуля что выше должно выводить 10 последних добавленных фильмов

в переменную $san_top10[8] выводится для какой категории выводить последнюю 10


но фильм добавленный сразу в несколько категорий показывается только в первой 1, а в остальных его нет
надо чтоб показывал в каждой отдельной категории

вот пример как надо не работающего модуля cinem.ru ( ссылку можно \ нужно удолить )

Отправлено: 19:51, 12-09-2011 | #6


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
SELECT `id` FROM `post` WHERE FIND_IN_SET(3, `category`)
должен вывести иды для 3 категории, где категория в виде "1,2,3,4" и "3"

проверьте простым запросом в админ-панели где-нибудь...

Отправлено: 21:31, 12-09-2011 | #7


Старожил


Сообщения: 359
Благодарности: 6

Профиль | Отправить PM | Цитировать


всё работает спасибо это я криворукий не в тот запрос вписал

но когда я прописываю из каких категориях выводить выдаёт ошибку

FIND_IN_SET(14,13,2,3,4,5,6,7,8,9,10,11,12,16, `category`)

Отправлено: 22:54, 12-09-2011 | #8


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


rtm там только два параметра допустимы. Если категорий несколько, то на каждую свой FIND_IN_SET. Строку в скрипте можно сформировать.
Код: Выделить весь код
....
AND (
   FIND_IN_SET(14,`category`) OR
   FIND_IN_SET(13,`category`) OR
   FIND_IN_SET(2,`category`)
) AND
.....
красивее способа не знаю.

Отправлено: 08:03, 13-09-2011 | #9


Старожил


Сообщения: 359
Благодарности: 6

Профиль | Отправить PM | Цитировать


а как составить запрос чтоб в цикле выводило только определённые записи из базы данных ?

пример
мне надо чтоб вывело только id=678 \ id=876 \ id=987

Отправлено: 02:54, 16-09-2011 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » запрос к базе данных

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - построения графа по базе данных IvanBaich Программирование и базы данных 4 15-10-2010 13:21
[решено] Сортировка данных, запрос к БД к разным полям. zvezda_t Вебмастеру 2 22-04-2010 16:36
MySQL - [решено] сохранение данных в базе данных Mysql TigerZaka Программирование и базы данных 4 24-08-2008 15:48
SQL-запрос для разных наборов данных kukushka Программирование и базы данных 3 14-12-2004 11:04
Дробление табличек в базе данных x404 Программирование и базы данных 2 23-10-2003 02:21




 
Переход