Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как правильно организовать выборку / 25 сообщений из 41, страница 1 из 2
26.06.2012, 13:44:56
    #37854899
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
Есть таблицы , в них поле с категориями cont_cat указаны, например, в таком формате ( 1,2,5 )

Пробывал организовать такую выборку, но like не вариант, так как (1, 11) - разные вещи
Код: php
1.
2.
3.
$this->db->like($this->cat /*cont_cat*/, $cat_id /*например 2*/); 
$this->db->limit($limit, $start_from); // не суть
$query = $this->db->get($this->table); 



Есть задумка, сделать через explode , но хочу что бы было оптимально

делал так, но это вообще бред
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        $this->db->order_by('cont_alias', 'desc');
        $query = $this->db->get($this->table);
        $row = $query->row_array();
        $page_cat = $row['cont_cat'];
        $cat_num = explode(",", $page_cat); // формируем массив с категориями
        foreach ($cat_num as $key => $value) {
            if ($cat_id == $value) {
                $this->db->where($this->cat, $cat_id);
                $query = $this->db->get($this->table);
            }
        }
        $this->db->limit($limit, $start_from);
        return $query->result_array();
...
Рейтинг: 0 / 0
26.06.2012, 13:55:02
    #37854933
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
hemoy,

в чем вопрос?
...
Рейтинг: 0 / 0
26.06.2012, 13:59:04
    #37854949
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
r u,

как организовать выборку, если в таблице (t_content) категории (cont_cat) указаны например в таком формате 1,2,3 ; через запятую .
...
Рейтинг: 0 / 0
26.06.2012, 14:00:42
    #37854953
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
hemoy,

1,2,3 id категорий
...
Рейтинг: 0 / 0
26.06.2012, 14:01:15
    #37854955
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
hemoy,

у таблицы, могут быть несколько категорий
...
Рейтинг: 0 / 0
26.06.2012, 14:17:54
    #37855002
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
hemoy,

Не понятно, в чем трудность - написать SQL-запрос, который делает выборку или сформировать этот запрос скриптом из исходных данных?
В первом случае вопрос немного не по адресу - задайте его в форуме по используемой Вами СУБД.
...
Рейтинг: 0 / 0
26.06.2012, 14:23:06
    #37855022
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
vkle,

мне нужен алгоритм, как сделать скрипт, там уж я сам напишу.
...
Рейтинг: 0 / 0
26.06.2012, 14:43:19
    #37855094
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
hemoy,

Тады огласите примеры:
- исходных данных
- желаемого результата, полученного из этих данных
...
Рейтинг: 0 / 0
26.06.2012, 17:58:43
    #37855665
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
vkle,

Вот массив контента:

Array
(
[0] => Array
(
[cont_id] => 1
[cont_id_author] => 0
[cont_date] => 2012-06-01
[cont_alias] => privet
[cont_title] => Privet
[cont_intro] => Privet
[cont_full] => Privet
[cont_state] => 1
[cont_date_mod] => 2012-06-01
[cont_images] => 1
[cont_cat] => 11
[cont_order] => 1
[cont_des] => 1
[cont_key] => 1
[cont_head] => 1
[cont_access] => 1
[cont_hits] => 1
[cont_tags] => 1
)

[1] => Array
(
[cont_id] => 2
[cont_id_author] => 1
[cont_date] => 0000-00-00
[cont_alias] => 1
[cont_title] => 1
[cont_intro] => 1
[cont_full] => 1
[cont_state] => 1
[cont_date_mod] => 0000-00-00
[cont_images] => 1
[cont_cat] => 1,2,3,4,5
[cont_order] => 1
[cont_des] => 0000-00-00
[cont_key] => 1
[cont_head] => 1
[cont_access] => 1
[cont_hits] => 1
[cont_tags] => 1
)

[2] => Array
(
[cont_id] => 3
[cont_id_author] => 1
[cont_date] => 0000-00-00
[cont_alias] => 1
[cont_title] => 1
[cont_intro] => 1
[cont_full] => 1
[cont_state] => 1
[cont_date_mod] => 2012-06-27
[cont_images] => 1
[cont_cat] => 2
[cont_order] => 1
[cont_des] => 1
[cont_key] => 1
[cont_head] => 1
[cont_access] => 0
[cont_hits] => 0
[cont_tags] => 1
)

[3] => Array
(
[cont_id] => 4
[cont_id_author] => 323
[cont_date] => 0000-00-00
[cont_alias] => 32
[cont_title] => 323
[cont_intro] => 232
[cont_full] => 32
[cont_state] => 323
[cont_date_mod] => 0000-00-00
[cont_images] => 232
[cont_cat] => 1,2,3,4,5
[cont_order] => 32
[cont_des] => 1
[cont_key] => 11
[cont_head] => 1
[cont_access] => 0
[cont_hits] => 0
[cont_tags] => 1
)

[4] => Array
(
[cont_id] => 5
[cont_id_author] => 0
[cont_date] => 0000-00-00
[cont_alias] => 1
[cont_title] => 1
[cont_intro] => 4334
[cont_full] => 434
[cont_state] => 3434
[cont_date_mod] => 0000-00-00
[cont_images] => 1
[cont_cat] => 1,2,3,4,5
[cont_order] => 0
[cont_des] => 1
[cont_key] => 1
[cont_head] => 1
[cont_access] => 0
[cont_hits] => 0
[cont_tags] => 1
)

)


мой код на обработку массива

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  $resarray = array();
        
              //$this->db->select($this->cat);
              $this->db->from($this->table);
                $query = $this->db->get(); // Получаем все записи таблицы
                $allcontent = $query->result_array();
                foreach ($allcontent as $key => $value ){
                    foreach ($value as $keysub['cont_cat'] => $valuesub) {
                        $cat_num = explode(",", $valuesub); // массив id категорий $valuesub
                    
                    foreach ($cat_num as $key2 => $value2){
                        if($value2 == $cat_id){ // сравниваем нашу категорию
                            $resarray = $resarray + $allcontent[$key];
    
                            }
                    
                        }
                    }
                }



нужно собрать массив $resarray из статей, где в поле cont_cat например , есть '1' передается функции, переменная $cat_id = 1.


Чет неправильно работает
...
Рейтинг: 0 / 0
26.06.2012, 18:22:52
    #37855705
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
Код: php
1.
$resarray = $resarray + $allcontent[$key];


видимо ту неверно сумируете
...
Рейтинг: 0 / 0
26.06.2012, 18:31:54
    #37855720
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
hemoy,

Мдя... Мож это Вам надо?
...
Рейтинг: 0 / 0
26.06.2012, 18:32:14
    #37855721
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
hemoy,

Все разобрался ),
а еще вопрос, можно код как то сократить или оптимизировать?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
    public function get_page($cat_id, $limit, $start_from=0)
    {

        $resarray = array();
        
              //$this->db->select($this->cat);
              $this->db->from($this->table);
                $query = $this->db->get(); // Получаем все записи таблицы
                $allcontent = $query->result_array();

                foreach ($allcontent as $key => $value ){
                    foreach ($value as $keysub => $valuesub) {
                        
                        if ($keysub=='cont_cat'){
                             $cat_num = explode(",", $valuesub); // массив id категорий $valuesub
                             foreach ($cat_num as $key2 => $value2){
                                if($value2 == $cat_id){
                                   $this->db->or_where('cont_id', $value['cont_id']);
                                    
                                    }
                    
                        }
                            
                        }
                       
                    
             
                    }
                }
                
                
                
                $this->db->limit($limit, $start_from);
                $query = $this->db->get($this->table);
                return  $query->result_array();
                
             

   
    }
...
Рейтинг: 0 / 0
26.06.2012, 18:33:52
    #37855725
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
hemoy,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
 public function get_page($cat_id, $limit, $start_from = 0)
    {

        $resarray = array();

        $this->db->from($this->table);
        $query = $this->db->get(); // Получаем все записи таблицы
        $allcontent = $query->result_array();

        foreach ($allcontent as $key => $value) {
            foreach ($value as $keysub => $valuesub) {

                if ($keysub == 'cont_cat') {
                    $cat_num = explode(",", $valuesub); // массив id категорий $valuesub
                    foreach ($cat_num as $key2 => $value2) {
                        if ($value2 == $cat_id) {
                            $this->db->or_where('cont_id', $value['cont_id']);

                        }

                    }

                }


            }
        }


        $this->db->limit($limit, $start_from);
        $query = $this->db->get($this->table);
        return $query->result_array();


    }
...
Рейтинг: 0 / 0
26.06.2012, 19:22:03
    #37855787
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
Ад какой-то. Сделайте нормальную структуру бд
...
Рейтинг: 0 / 0
26.06.2012, 19:34:09
    #37855803
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
поясните
...
Рейтинг: 0 / 0
26.06.2012, 20:05:50
    #37855841
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
авторЕсть таблицы , в них поле с категориями cont_cat указаны, например, в таком формате ( 1,2,5 )
...
Рейтинг: 0 / 0
26.06.2012, 20:25:26
    #37855860
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
а как сделать?
...
Рейтинг: 0 / 0
26.06.2012, 20:37:33
    #37855870
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
с помощью связывающей таблицы:

item_id
category_id
...
Рейтинг: 0 / 0
26.06.2012, 20:38:57
    #37855872
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
если это mysql, в других субд возможно есть более удобные методы для организации связей many-to-many
...
Рейтинг: 0 / 0
26.06.2012, 21:13:18
    #37855908
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
Hett,

типо этого ? http://file.qip.ru/photo/cWzZzpKZ/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.html][IMG] http://dc257.file.qip.ru/img/cWzZzpKZ/0.201337667776756/Безымянный.png [/IMG]
...
Рейтинг: 0 / 0
26.06.2012, 21:18:52
    #37855913
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
Типа этого.
...
Рейтинг: 0 / 0
26.06.2012, 21:22:35
    #37855915
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
Hett,

спасибо, сейчас попробую реализовать)
...
Рейтинг: 0 / 0
26.06.2012, 21:57:35
    #37855951
hemoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
Hett,

Заметил что у таблицы hb_item_category нет primary key,
...
Рейтинг: 0 / 0
26.06.2012, 22:03:48
    #37855960
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
можете использовать составной (item_id, category_id) или наоборот (в зависимости от ситуации)
...
Рейтинг: 0 / 0
26.06.2012, 22:06:20
    #37855962
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать выборку
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE t2.item_category(
  item_id INT(11) UNSIGNED NOT NULL,
  category_id INT(11) UNSIGNED NOT NULL,
  PRIMARY KEY (category_id, item_id)
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как правильно организовать выборку / 25 сообщений из 41, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]