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 :: SELECT из поля по определенному значению

 PHP.SU

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


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

> Описание: помогите решить задачку
dmaw
Отправлено: 14 Февраля, 2010 - 18:11:30
Post Id



Частый гость


Покинул форум
Сообщений всего: 227
Дата рег-ции: Сент. 2009  
Откуда: Беларусь, Витебск


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




Есть статья к которой я задаю три метки, например: книги,журналы,брошюры, подобных статей много, типа блог.

Все данные хранятся в БД, нас интересуют только ячейки с метками. Так вот, мне нужно сделать такой запрос, чтобы из БД были выведены все записи, где метках встречается слово журналы.

Как вариант можно перебирать всю БД, далее с помощью функций находить нужное слово в метках и отображать записи с этим словом, но этот вариант мне не подходит, нужно чтобы выбор был именно в запросе к БД.
 
 Top
voltag
Отправлено: 14 Февраля, 2010 - 18:34:59
Post Id


Новичок


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


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




Простите я не понял почему Вам не хватает простого запроса....
Пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. //пример с книгами
  3.   $qrt=mysql_query('SELECT * FROM `my_table` WHERE `mark`='книги');
  4.  $qrt=mysql_fetch_object($qrt); // и т д
  5.  


Вы говорите что "я задаю ТРИ метки". То есть я могу предположить что статья может иметь 3 метки одновременно... например
book_mark метка книги
journal_mark метка журнала
brosh_mark метка брошюры
если метка равна 0 то её нет если 1 то она есть

вот пример запроса
PHP:
скопировать код в буфер обмена
  1.  
  2. //пример с книгами
  3.   $qrt=mysql_query('SELECT * FROM `my_table` WHERE `book_mark`='1');
  4.  $qrt=mysql_fetch_object($qrt); // и т д
  5.  


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

Надеюсь вам поможет
 
 Top
dmaw
Отправлено: 14 Февраля, 2010 - 18:39:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 227
Дата рег-ции: Сент. 2009  
Откуда: Беларусь, Витебск


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




voltag пишет:
вы случайно метки в строку через запятую не ставите в одно поле?

Именно, поэтому и не могу пока сообразить как решить эту задачу. Думал создать три поля, но ...

Может можно решить это как-то так:
CODE (SQL):
скопировать код в буфер обмена
  1. "SELECT * FROM  WHERE MATCH(marks) AGAINST('журналы')"

(Отредактировано автором: 14 Февраля, 2010 - 18:44:31)

 
 Top
PeleWin
Отправлено: 14 Февраля, 2010 - 20:15:56
Post Id


Новичок


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


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




Более правильным решением было бы декомпозировать таблицу "статьи" на две таблицы:
"статьи" и "метки", задав отношение один-ко-многим между статьями и метками.
Это дало бы:
- сокращение избыточности данных (не нужно хранить много раз сами строки "журналы, книги, брошюры", достаточно их кодов)
- удобство работы (легкость выбора, редактирования, удаления меток).

Но так как переделывать структуру базы данных я чувствую ты не будешь, то простым решением будет использование оператора LIKE:
SELECT *
FROM `papers`
WHERE `mark` LIKE '%ЖУРНАЛЫ%'

(Отредактировано автором: 14 Февраля, 2010 - 20:19:46)

 
 Top
dmaw
Отправлено: 15 Февраля, 2010 - 09:07:31
Post Id



Частый гость


Покинул форум
Сообщений всего: 227
Дата рег-ции: Сент. 2009  
Откуда: Беларусь, Витебск


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




PeleWin пишет:
Но так как переделывать структуру базы данных я чувствую ты не будешь, то простым решением будет использование оператора LIKE:

Изначально у мены примерно так и было, даже остался редактор меток.

Хорошо, если у меня есть таблица с метками:

mark_id | mark_name

как тогда хранить информацию о метках в таблице записей (постов)

post_id | post_title | post_text | post_mark

я полагаю меняется только способ записи, если раньше было:
книги,журналы,брошюры
то теперь вместо меток будут их mark_id, тоесть 1,2,3 так? В любом случае при поиске определённой метки мне нужно выбирать поля с тем или иным номером метки.

Может есть какие-нибудь другие способы решения этой задачи?
 
 Top
Viper
Отправлено: 15 Февраля, 2010 - 10:54:11
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




dmaw пишет:
Может можно решить это как-то так:
CODE (SQL):
скопировать код в буфер обмена

1.
"SELECT * FROM WHERE MATCH(marks) AGAINST('журналы')"

интересно чем это вам поможет?

PS! В базе меток храните id постов с разделителем. это несколько уменьшит размер БД при большом кол-ве постов.
Разница будет лишь в том, что раньше вы использовали LIKE, а теперь будете использовать IN.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
dmaw
Отправлено: 15 Февраля, 2010 - 18:01:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 227
Дата рег-ции: Сент. 2009  
Откуда: Беларусь, Витебск


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




Viper пишет:
PS! В базе меток храните id постов с разделителем.

т.е. хранить не метки в постах, а посты в метках?
mark_id | mark_name | post_id
 
 Top
PeleWin
Отправлено: 15 Февраля, 2010 - 18:30:23
Post Id


Новичок


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


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




Я ошибся в предыдущем посте, сказав, что свзяь между статьями и метками будет один-ко-многим. Конечно на самом деле связь будет многие-ко-многим.

Как это реализуется?
Очевидно так:
1 таблица - статьи (идСтатьи, ...)
2 таблица - метки (идМетки, текстМетки)
3 таблица - связьМеждуСтатьямиИметками (идСтатьи, идМетки)

Как выбрать текст меток данной статьи?
Очевидно так:
SELECT текстМетки
FROM метки INNER JOIN связьМеждуСтатьямиИметками USING (идМетки)
WHERE идСтатьи = $id
 
 Top
dmaw
Отправлено: 15 Февраля, 2010 - 19:57:42
Post Id



Частый гость


Покинул форум
Сообщений всего: 227
Дата рег-ции: Сент. 2009  
Откуда: Беларусь, Витебск


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




PeleWin пишет:
SELECT текстМетки
FROM метки INNER JOIN связьМеждуСтатьямиИметками USING (идМетки)
WHERE идСтатьи = $id

Хм, оказывается я ещё многого не знаю, php становится всё интереснее Улыбка
PeleWin, спасибо!
 
 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