Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не получается додумать формирование "С этим рецептом смотрят также"
 
 автор: Dinya_1   (14.08.2014 в 19:10)   письмо автору
 
 

Не получается додумать формирование "С этим рецептом смотрят также".

Суть проблемы: Не получается организовать поочередный перебор $title2 и $title3 во втором запросе до пяти раз.

<?
//Извлекаем нужную Статью 
$res mysql_query ("SELECT * FROM articles WHERE id='4392' ",$db);
if (
mysql_num_rows($res) > 0)
{
$rowmysql_fetch_array($res);
do
{
/*echo "";*/
   //Выбираем следующие 5 статей для отбора из Тайтла
   
$res_title mysql_query("SELECT * FROM articles WHERE id>'$row[id]' ORDER BY id LIMIT 5 ",$db);
   if(
mysql_num_rows($res_title) > 0
   { 
   
//Нумерация вывода
   
$x 0;
   while (
$row_title mysql_fetch_array($res_title))  
   {
   
//Разбиваем Строку Тайтла на нужные предложения
   
$data "$row_title[title]";
  list(
$title1$title2$title3) = explode(" - "$data);
     
     
//В этом месте нужно организовать поочередный перебор между  $title2 - $title3 до 5 раз
   
   
echo ++$x.". $row_title[id] - $title2 - $title3 <br/>";

    
Результат Вывода:
  
1. 4393 -  Рецепт щуки паровой (французского блюда) - Как приготовить щуку паровую (французское блюдо
    
2. 4394 Рецепт щуки сваренной кольцом Как приготовить щуку сваренную кольцом 
    3. 4395 
Рецепт щуки фаршированной (румынского блюда) - Как приготовить щуку фаршированную (румынское блюдо
    
4. 4396 Рецепт припущенной рыбы Как приготовить припущенную рыбу 
    5. 4397 
Рецепт карпа фаршированного в соусе «белое вино» Как приготовить карпа фаршированного в соусе «белое вино» 

    А требуется так
: (т.еВзять по одному предложению из каждой строки)
   
1. 4393 -   Рецепт щуки паровой (французского блюда)                   //$title2
    
2. 4394 -  Как приготовить щуку сваренную кольцом                        //$title3
    
3. 4395 -  Рецепт щуки фаршированной (румынского блюда)       //$title2
    
4. 4396 -  Как приготовить припущенную рыбу                                   //$title3
    
5. 4397 Рецепт карпа фаршированного в соусе «белое вино»  //$title2

    
Суть вопросаОрганизовать поочередный перебор $title2 и $title3 

      
   
}
   } 
   

}
while (
$row mysql_fetch_array($res));
}
?>

  Ответить  
 
 автор: Valick   (14.08.2014 в 20:25)   письмо автору
 
   для: Dinya_1   (14.08.2014 в 19:10)
 

пока вы будете испльзовать do {} while() у вас ничего и не получиться. Это значает лишь одно, то что вы думаете головой Ж.Попова но никак не своей собственной.
для того чтобы организовать
"С этим рецептом смотрят также"
вам необходимо вести реальную статистику просмотров, и выдавать результат (по хорошему с учетом маркетингового отдела)
если "К этому рецепту подойдут также", то здесь уже вам самому нужно определять критерии выборки
либо это аналогичный рецепт (как в вашем случае) либо это рецепты дополняющие типа комплексный обед.
В вашем случае это "Аналогичные рецепты", поиск которых должен осуществляться по тэгам, а в лучшем случае с учетом рейтинга, у вас же какое-то непонятное WHERE id>'$row[id]'

Данная задача должна решаться одним запросом с приминением UNION

>Суть вопроса: Организовать поочередный перебор $title2 и $title3
создаете переменную и считаете чётные и нечётные итерации цикла
четные $title2 нечётные $title3
для опрделения чётности используйте деление по модулю

  Ответить  
 
 автор: confirm   (14.08.2014 в 20:27)   письмо автору
 
   для: Dinya_1   (14.08.2014 в 19:10)
 

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

<?
$row
mysql_fetch_array($res); 
do 
{


это грех. И вот почему, то есть цикл do...while в данном случае совсем не нужен (причем у вас сперва do...while, а потом while, то есть совсем не думая), а используя ассоциативные данные ресурса, использовать mysql_fetch_array так как у вас, это второй грех. Либо указывайте вторым аргументом нужное, отсекая лишнее, либо используйте mysql_fetch_assoc .

Писать код не форматируя его (без отступов) это еще один грех:

<?
//либо
while ($row_title mysql_fetch_array($res_title))
    {
        
//тело цикла
    
}

//либо в стиле JS
while ($row_title mysql_fetch_array($res_title))  {
    
//тело цикла
}

//но уж никак не как у вас, бог понять по какому принципу


Зачем два запроса к базе к одной и той же таблице за тем же самым?

<?
//конкретный номер в запросе, ну этого просто не может быть
//должна быть переменная, причем ее значение должно пройти фильтр
//при этом номер в кавычки заключать не обязательно   
$res mysql_query ("SELECT * FROM articles WHERE id >= $var  ORDER BY id LIMIT 6",$db); 
if (
$res && mysql_num_rows($res) > 0) { 
    while(
$row mysql_fetch_assoc($res)) {
        
//вывод ресурса
    
}
}


А вот за это нужно быть по рукам - $data = "$row_title[title]";
Это зачем заносить в кавычки? И почему не сразу (при чем без всяких промежуточных переменных)?:

<?
list($title1$title2$title3) = explode(" - ",  $row['title']);


Если $title2, это элемент содержащий "Рецепт щуки паровой (французского блюда)", и его только нужно вывести, то зачем тогда выводите $row_title[id] - $title2 - $title3?

И вообще, если "Рецепт щуки паровой (французского блюда)" - это название рецепта, а далее через дефис его описание, и это так и содержится в базе, то это ваш очередной грех. Название рецепта это одно поле таблицы, а его описание, другое поле таблицы. Если одно и тоже блюдо может иметь несколько рецептов, тогда описания рецептов должны храниться вообще в другой таблице.

  Ответить  
 
 автор: Valick   (14.08.2014 в 20:49)   письмо автору
 
   для: confirm   (14.08.2014 в 20:27)
 

Если одно и тоже блюдо может иметь несколько рецептов, тогда описания рецептов должны храниться вообще в другой таблице.
обычно это одно и тоже название блюда имеющее разные рецепты, поэтому достаточно уникального id, здесь конкретно приготовленное блюдо не выступает как сущьность
но то что описание однозначно должно быть отдельным полем это да, но на сколько я понял речь о $title2 и $title3

  Ответить  
 
 автор: confirm   (14.08.2014 в 20:53)   письмо автору
 
   для: Valick   (14.08.2014 в 20:49)
 

Я не знаю кто за кого у него выступает, просто вижу, что данные хранятся бардаком.

  Ответить  
 
 автор: Dinya_1   (14.08.2014 в 21:01)   письмо автору
 
   для: confirm   (14.08.2014 в 20:27)
 

Спасибо всем за ответы.
Много написали.

Пожалуй мне подойдет ответ про сверку четных и не четных циклов.

Про do While конечно же отдельное спасибо.

P/s: а Женю Попова трогать не надо.
Если Вы больше знаете - это не дает Вам право глумиться и оскорблять человека.
Признак ума (Вашего Valick в данном случае ) состоит не в том, что бы гадить на всех, а в том, что бы вовремя себя сдержать и подсказать...

  Ответить  
 
 автор: confirm   (14.08.2014 в 21:13)   письмо автору
 
   для: Dinya_1   (14.08.2014 в 21:01)
 

А при чем тут "сверка четных и не четных циклов", если вам надо вывести рецепт, а под ним еще 5? Либо вы неверно описываете проблему и вам надо название рецепта, а под ним описание, и здесь четное и нечетное вообще не требуется, либо вы не понимаете вообще проблемы.

PS. Я не знаю Женю Попова, но если этому вы научились у него, то забудьте вы об этом "учителе", и чем раньше тем лучше для вас.

  Ответить  
 
 автор: Valick   (14.08.2014 в 21:24)   письмо автору
 
   для: confirm   (14.08.2014 в 21:13)
 

>А при чем тут "сверка четных и не четных циклов"
>Суть вопроса: Организовать поочередный перебор $title2 и $title3

>PS. Я не знаю Женю Попова
Вы точно землянин? :)

  Ответить  
 
 автор: Dinya_1   (14.08.2014 в 21:29)   письмо автору
 
   для: Valick   (14.08.2014 в 21:24)
 

Вы там сверху писали

>то что вы думаете головой Ж.Попова но никак не своей собственной.

  Ответить  
 
 автор: confirm   (14.08.2014 в 21:35)   письмо автору
 
   для: Valick   (14.08.2014 в 21:24)
 

Я не знаю что в данном контексте подразумевается "поочередным перебором", а то что вижу и что требуется даже смутно чего-то экстраординарного не напоминает.

  Ответить  
 
 автор: Dinya_1   (14.08.2014 в 21:37)   письмо автору
 
   для: Valick   (14.08.2014 в 21:24)
 

>Суть вопроса: Организовать поочередный перебор $title2 и $title3

В каждом Рецепте кроме названия есть еще по 2 ВидоИзмененных названия $title2 и $title3


Берем пять рецептов и вытаскиваем из них Тайтлы, по одному из каждого

1. $title2
2. $title3
3. $title2
4. $title3
5. $title2

Закладываем их в переменную $linc_takje и заносим в базу рецепта первого цикла


$linc_takje = 
"
1. $title2
2. $title3
3. $title2
4. $title3
5. $title2
"

 $update = mysql_query("UPDATE articles SET `linc_takje`='$linc_takje'  WHERE id='$row[id]' ",$db);


Не знаю как еще Вам написать.

  Ответить  
 
 автор: confirm   (14.08.2014 в 21:46)   письмо автору
 
   для: Dinya_1   (14.08.2014 в 21:37)
 

А зачем это, да еще в такой неудобной форме?
Во-первых - вам уже заметили, что "с ним смотрят" должно быть все-таки основываться не на чепухе, а на рейтинге или еще чем либо основано.
Во-вторых - если это ссылки, что логично, то каков же их идентификатор?
Ну и в третьих - думаете, что выводя название рецепта, а следующим не его, а присказку к нему, это крутая находка для раскрутки? Вот хотелось бы смысл этого вывода понять.

  Ответить  
 
 автор: Dinya_1   (14.08.2014 в 22:01)   письмо автору
 
   для: confirm   (14.08.2014 в 21:46)
 

>А зачем это, да еще в такой неудобной форме?
К каждому рецепту Тайтл задаётся в ручную в двух, трех вариантах. И они уже заложены в базе.

>Во-первых - вам уже заметили, что "с ним смотрят" должно быть все-таки основываться не на чепухе, а на рейтинге или еще чем либо основано.
Здесь я с Вами согласен - Рецепты идут не одной чепухой а по разделам. Например в разделе "Жареная рыба" - Все рецепты про жареную рыбу. В "Смотрите также" Идут ссылки на рецепты одного раздела. - Такой подход увеличивает выдачу при запросах в поисковиках. (возможно Вы будете не согласны - но это работает)

>Во-вторых - если это ссылки, что логично, то каков же их идентификатор?
Да, это ссылки и идентификатор будет выведен по второму Циклу вывода из базы (в коде моего вопроса)

>Ну и в третьих - думаете, что выводя название рецепта, а следующим не его, а присказку к нему, это крутая находка для раскрутки? Вот хотелось бы смысл этого вывода понять.
Такой подход увеличивает выдачу при запросах в поисковиках. (возможно Вы будете не согласны - но это работает)

Если хотите могу Вам в "личку" отправить адрес страници на которой Вы сможете посмотреть наглядно

  Ответить  
 
 автор: confirm   (14.08.2014 в 22:23)   письмо автору
 
   для: Dinya_1   (14.08.2014 в 22:01)
 

Title - название, заголовок. Мы что бедны языком, есть необходимость "жаргонить"? )

>в двух, трех вариантах

Это уж тем более никак не подходит под определение четный/нечетный. Тут уж речь скорее о случайном выборе из множества вести надо.

"Смотрите также" и "С этим также смотрят" - все таки очень разные по содержанию, не так ли?

Роботы ищут содержание более соответствующее запросу, а не выкрутасы с четным/нечетным. Еще более шансов будет если Название + то, что вы называете модификацией, но с условием, что текст удачный, иначе ничего не поможет, кроме твердой валюты. Тем более, что имея по два варианта у вас постоянство.

  Ответить  
 
 автор: Valick   (14.08.2014 в 22:08)   письмо автору
 
   для: Dinya_1   (14.08.2014 в 21:37)
 

Закладываем их в переменную $linc_takje и заносим в базу рецепта первого цикла
очередная ошибка
мало того что вы роете себе яму, так еще и петлю на шее затягиваете покрепче
50% проекта - это организация хранения информации, т.е. архитектура БД
нельзя вот так на ровном месте сваливать всё в БД, что бы потом разгребать эту кучу средствами РНР

  Ответить  
 
 автор: Dinya_1   (14.08.2014 в 22:19)   письмо автору
 
   для: Valick   (14.08.2014 в 22:08)
 

Возможно Вы меня не правильно поняли.

Структура организованна правильно.
Средствами ПХП я пытаюсь разгрести как Вы выразились вручную (на локальном компе), в интернет он выложен не будет.

P/s: Наверное пора уже закрывать данную тему..

  Ответить  
 
 автор: elenaki   (15.08.2014 в 08:42)   письмо автору
 
   для: Dinya_1   (14.08.2014 в 22:19)
 

На вопрос "По какому принципу выбирать сопутствующие товары?" один клиент мне
ответил - я САМ буду заносить коды нужных товаров в соответствующие поля формы
при занесении нового товара. В конце формы ввода товара в админке я сделала три
текстовых поля, куда админ заносил коды товаров (для этого, конечно, те товары уже
должны быть в базе). Так просто. Он даже не разрешил мне сделать выбор кода из базы,
я хотела прикрутить окошко с выбором, но т.к. товаров довольно много было, то оно
тормозило. Другой решил вообще не заморачиваться и, хотя у каждого товара есть
рейтинг (сколько раз его покупали), в похожих товарах захотел вывести три любых из
той же категории. Это еще проще. Другой, с книгами, хотел показать другие книги того
же автора, но случайные три, не все. PS я тоже не знаю Ж.Попова.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования