Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывод из базы нескольких значений одного параметра

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Kronter
Отправлено: 19 Июня, 2014 - 10:45:39
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Добрый день!
У меня есть две таблицы: tema и catalog.

В таблице catalog перечислены позиции и есть колонка category, где указана категория позиции. Даю две строки:
1.nazvanie-ф, category-radio
2.nazvanie-а, category-stol

В таблице tema две колонки: tema и category. Даю две строки
1.tema-games, category-radio
2.tema-games, category-stol

Когда пользователь выбирает на сайте тему games, должны вывестись из таблицы catalog позиции, где категория равна radio или stol.

Блин уже голову сломал. У меня получается, что выпадают позиции только с одной категорией(последней), хотя я вывожу в цикле. Делаю так:

PHP:
скопировать код в буфер обмена
  1.  
  2. $tema = mysql_real_escape_string($_GET['tema']);
  3. $result3 = ("SELECT category FROM tema where tema='$tema'");
  4. $res3 = mysql_query($result3);
  5. while($row = mysql_fetch_assoc($res3))
  6. {
  7. $category=$row['category'];
  8. $result = ("SELECT * FROM catalog where category='$category'");
  9. }
  10.  


Можно ли вообще мой замысел реализовать? И если можно, подскажите как.
Спасибо

(Отредактировано автором: 19 Июня, 2014 - 10:53:47)

 
 Top
DelphinPRO
Отправлено: 19 Июня, 2014 - 10:57:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




CODE (text):
скопировать код в буфер обмена
  1. тема 1
  2.     категория 1
  3.         название 1
  4.         название 2
  5.         название 3
  6.     категория 2
  7.         название 4
  8.         название 5
  9.         название 6
  10.     категория 3
  11.         название 7
  12.         название 8
  13.         название 9
  14. тема 2
  15.     категория 4
  16.         название 10
  17.         название 11
  18.         название 12
  19.  ...


Я правильно понимаю структуру?

Налицо древовидный вид данных. И стоит задача дергать целую ветку.
Сразу вспоминаю о методе хранения деревьев Nested Sets

(Отредактировано автором: 19 Июня, 2014 - 10:57:42)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Kronter
Отправлено: 19 Июня, 2014 - 11:05:50
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Нет. Смысл в том, что в одной теме может быть несколько категорий, а одна категория может быть в разных темах.
Например:
тема1
категория1
категория2
категория3
тема2
категория1
категория2
тема3
категория1
категория3
 
 Top
DelphinPRO
Отправлено: 19 Июня, 2014 - 11:27:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




а, ну тогда ваш код в принципе должен работать. только данные нужно в массив собирать (вы резалт переписываете на каждой итерации, вот и сохраняется последняя)

PHP:
скопировать код в буфер обмена
  1. $result  = array();
  2.  
  3. ...
  4.  
  5. while () {
  6. ...
  7. $result[] = ...
  8. }


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Kronter
Отправлено: 19 Июня, 2014 - 11:39:26
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Блин, ниче не понял. Можете мой код исправить как надо?
(Добавление)
Никто больше не подскажет?
(Добавление)
Короче сделал так:

PHP:
скопировать код в буфер обмена
  1.  
  2. $tema = mysql_real_escape_string($_GET['tema']);
  3. $result3 = ("SELECT category FROM tema where tema='$tema'");
  4. $res3 = mysql_query($result3);
  5. while($row = mysql_fetch_assoc($res3))
  6. {
  7. $category[]=$row['category'];
  8. }
  9. $result = ("SELECT * FROM catalog where category='$category[0]' or  category='$category[1]'");
  10.  
  11.  


Все работает. Теперь новая проблема: Категорий может быть от одной до десяти. Если в селекте перечислить через or 10 категорий, а их в данной теме только одна, то все работать перестает.
Как же быть?
Как же быть
(Добавление)
Можно конечно добавить вот это:
PHP:
скопировать код в буфер обмена
  1.  
  2. $num=mysql_num_rows($res3);
  3. if ($num==1) {
  4. $result = ("SELECT * FROM catalog where category='$category[0]'");
  5. }
  6. else if ($num==2) {
  7. $result = ("SELECT * FROM catalog where category='$category[0]' or  category='$category[1]'");
  8. }
  9.  


и так до десяти, но мне кажется что можно это сделать как-то по другому

(Отредактировано автором: 19 Июня, 2014 - 13:46:31)

 
 Top
DelphinPRO
Отправлено: 19 Июня, 2014 - 14:22:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. $where = "category='" . join("' or  category='", $category) . "'";
  2. $result = ("SELECT * FROM catalog where $where");


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Sail
Отправлено: 19 Июня, 2014 - 14:43:20
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




А может, проще сделать?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT c.`nazvanie`, c.`category` FROM `tema` t JOIN `catalog` c ON c.`category` = t.`category` WHERE t.`tema` = 'TemaName'

Ну а если формировать строку $where из полученного массива, то лучше, однако, использовать
PHP:
скопировать код в буфер обмена
  1. ... "where `category` in (".implode(',', $category).")"

(Отредактировано автором: 19 Июня, 2014 - 14:45:12)

 
 Top
Kronter
Отправлено: 19 Июня, 2014 - 20:27:42
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
PHP:
скопировать код в буфер обмена
  1. $where = "category='" . join("' or  category='", $category) . "'";
  2. $result = ("SELECT * FROM catalog where $where");


Выдает нужные категории, но после каждой идет строчка с ошибкой:
Warning: join() [function.join]: Invalid arguments passed

Что-то наверное с синтаксисом. Не подскажете что исправить?
(Добавление)
Спасибо. Все получилось
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB