|
|
|
| Не получается додумать формирование "С этим рецептом смотрят также".
Суть проблемы: Не получается организовать поочередный перебор $title2 и $title3 во втором запросе до пяти раз.
<?
//Извлекаем нужную Статью
$res = mysql_query ("SELECT * FROM articles WHERE id='4392' ",$db);
if (mysql_num_rows($res) > 0)
{
$row= mysql_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));
}
?>
|
| |
|
|
|
|
|
|
|
для: Dinya_1
(14.08.2014 в 19:10)
| | пока вы будете испльзовать do {} while() у вас ничего и не получиться. Это значает лишь одно, то что вы думаете головой Ж.Попова но никак не своей собственной.
для того чтобы организовать
"С этим рецептом смотрят также"
вам необходимо вести реальную статистику просмотров, и выдавать результат (по хорошему с учетом маркетингового отдела)
если "К этому рецепту подойдут также", то здесь уже вам самому нужно определять критерии выборки
либо это аналогичный рецепт (как в вашем случае) либо это рецепты дополняющие типа комплексный обед.
В вашем случае это "Аналогичные рецепты", поиск которых должен осуществляться по тэгам, а в лучшем случае с учетом рейтинга, у вас же какое-то непонятное WHERE id>'$row[id]'
Данная задача должна решаться одним запросом с приминением UNION
>Суть вопроса: Организовать поочередный перебор $title2 и $title3
создаете переменную и считаете чётные и нечётные итерации цикла
четные $title2 нечётные $title3
для опрделения чётности используйте деление по модулю | |
|
|
|
|
|
|
|
для: 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?
И вообще, если "Рецепт щуки паровой (французского блюда)" - это название рецепта, а далее через дефис его описание, и это так и содержится в базе, то это ваш очередной грех. Название рецепта это одно поле таблицы, а его описание, другое поле таблицы. Если одно и тоже блюдо может иметь несколько рецептов, тогда описания рецептов должны храниться вообще в другой таблице. | |
|
|
|
|
|
|
|
для: confirm
(14.08.2014 в 20:27)
| | Если одно и тоже блюдо может иметь несколько рецептов, тогда описания рецептов должны храниться вообще в другой таблице.
обычно это одно и тоже название блюда имеющее разные рецепты, поэтому достаточно уникального id, здесь конкретно приготовленное блюдо не выступает как сущьность
но то что описание однозначно должно быть отдельным полем это да, но на сколько я понял речь о $title2 и $title3 | |
|
|
|
|
|
|
|
для: Valick
(14.08.2014 в 20:49)
| | Я не знаю кто за кого у него выступает, просто вижу, что данные хранятся бардаком. | |
|
|
|
|
|
|
|
для: confirm
(14.08.2014 в 20:27)
| | Спасибо всем за ответы.
Много написали.
Пожалуй мне подойдет ответ про сверку четных и не четных циклов.
Про do While конечно же отдельное спасибо.
P/s: а Женю Попова трогать не надо.
Если Вы больше знаете - это не дает Вам право глумиться и оскорблять человека.
Признак ума (Вашего Valick в данном случае ) состоит не в том, что бы гадить на всех, а в том, что бы вовремя себя сдержать и подсказать... | |
|
|
|
|
|
|
|
для: Dinya_1
(14.08.2014 в 21:01)
| | А при чем тут "сверка четных и не четных циклов", если вам надо вывести рецепт, а под ним еще 5? Либо вы неверно описываете проблему и вам надо название рецепта, а под ним описание, и здесь четное и нечетное вообще не требуется, либо вы не понимаете вообще проблемы.
PS. Я не знаю Женю Попова, но если этому вы научились у него, то забудьте вы об этом "учителе", и чем раньше тем лучше для вас. | |
|
|
|
|
|
|
|
для: confirm
(14.08.2014 в 21:13)
| | >А при чем тут "сверка четных и не четных циклов"
>Суть вопроса: Организовать поочередный перебор $title2 и $title3
>PS. Я не знаю Женю Попова
Вы точно землянин? :) | |
|
|
|
|
|
|
|
для: Valick
(14.08.2014 в 21:24)
| | Вы там сверху писали
>то что вы думаете головой Ж.Попова но никак не своей собственной. | |
|
|
|
|
|
|
|
для: Valick
(14.08.2014 в 21:24)
| | Я не знаю что в данном контексте подразумевается "поочередным перебором", а то что вижу и что требуется даже смутно чего-то экстраординарного не напоминает. | |
|
|
|
|
|
|
|
для: 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);
|
Не знаю как еще Вам написать. | |
|
|
|
|
|
|
|
для: Dinya_1
(14.08.2014 в 21:37)
| | А зачем это, да еще в такой неудобной форме?
Во-первых - вам уже заметили, что "с ним смотрят" должно быть все-таки основываться не на чепухе, а на рейтинге или еще чем либо основано.
Во-вторых - если это ссылки, что логично, то каков же их идентификатор?
Ну и в третьих - думаете, что выводя название рецепта, а следующим не его, а присказку к нему, это крутая находка для раскрутки? Вот хотелось бы смысл этого вывода понять. | |
|
|
|
|
|
|
|
для: confirm
(14.08.2014 в 21:46)
| | >А зачем это, да еще в такой неудобной форме?
К каждому рецепту Тайтл задаётся в ручную в двух, трех вариантах. И они уже заложены в базе.
>Во-первых - вам уже заметили, что "с ним смотрят" должно быть все-таки основываться не на чепухе, а на рейтинге или еще чем либо основано.
Здесь я с Вами согласен - Рецепты идут не одной чепухой а по разделам. Например в разделе "Жареная рыба" - Все рецепты про жареную рыбу. В "Смотрите также" Идут ссылки на рецепты одного раздела. - Такой подход увеличивает выдачу при запросах в поисковиках. (возможно Вы будете не согласны - но это работает)
>Во-вторых - если это ссылки, что логично, то каков же их идентификатор?
Да, это ссылки и идентификатор будет выведен по второму Циклу вывода из базы (в коде моего вопроса)
>Ну и в третьих - думаете, что выводя название рецепта, а следующим не его, а присказку к нему, это крутая находка для раскрутки? Вот хотелось бы смысл этого вывода понять.
Такой подход увеличивает выдачу при запросах в поисковиках. (возможно Вы будете не согласны - но это работает)
Если хотите могу Вам в "личку" отправить адрес страници на которой Вы сможете посмотреть наглядно | |
|
|
|
|
|
|
|
для: Dinya_1
(14.08.2014 в 22:01)
| | Title - название, заголовок. Мы что бедны языком, есть необходимость "жаргонить"? )
>в двух, трех вариантах
Это уж тем более никак не подходит под определение четный/нечетный. Тут уж речь скорее о случайном выборе из множества вести надо.
"Смотрите также" и "С этим также смотрят" - все таки очень разные по содержанию, не так ли?
Роботы ищут содержание более соответствующее запросу, а не выкрутасы с четным/нечетным. Еще более шансов будет если Название + то, что вы называете модификацией, но с условием, что текст удачный, иначе ничего не поможет, кроме твердой валюты. Тем более, что имея по два варианта у вас постоянство. | |
|
|
|
|
|
|
|
для: Dinya_1
(14.08.2014 в 21:37)
| | Закладываем их в переменную $linc_takje и заносим в базу рецепта первого цикла
очередная ошибка
мало того что вы роете себе яму, так еще и петлю на шее затягиваете покрепче
50% проекта - это организация хранения информации, т.е. архитектура БД
нельзя вот так на ровном месте сваливать всё в БД, что бы потом разгребать эту кучу средствами РНР | |
|
|
|
|
|
|
|
для: Valick
(14.08.2014 в 22:08)
| | Возможно Вы меня не правильно поняли.
Структура организованна правильно.
Средствами ПХП я пытаюсь разгрести как Вы выразились вручную (на локальном компе), в интернет он выложен не будет.
P/s: Наверное пора уже закрывать данную тему.. | |
|
|
|
|
|
|
|
для: Dinya_1
(14.08.2014 в 22:19)
| | На вопрос "По какому принципу выбирать сопутствующие товары?" один клиент мне
ответил - я САМ буду заносить коды нужных товаров в соответствующие поля формы
при занесении нового товара. В конце формы ввода товара в админке я сделала три
текстовых поля, куда админ заносил коды товаров (для этого, конечно, те товары уже
должны быть в базе). Так просто. Он даже не разрешил мне сделать выбор кода из базы,
я хотела прикрутить окошко с выбором, но т.к. товаров довольно много было, то оно
тормозило. Другой решил вообще не заморачиваться и, хотя у каждого товара есть
рейтинг (сколько раз его покупали), в похожих товарах захотел вывести три любых из
той же категории. Это еще проще. Другой, с книгами, хотел показать другие книги того
же автора, но случайные три, не все. PS я тоже не знаю Ж.Попова. | |
|
|
|