Помогите с циклом

singmen

Новичок
Скрипт выводит похожие материалы по названию, но есть ошибка, допустим название материала кот, кот, кот, скрипт будет выводить 5 материалов с 1 словом, потом 5 материалов со 2 словом и 5 с третьим, как исправить? чтоб всего 5.

PHP:
$z = $strz['title'];
foreach(explode(' ',$z) as $part){
if(strlen($part)>2){
$part = mysql_real_escape_string($part);
$res=mysql_query("SELECT * FROM posts WHERE title LIKE '%$part%' LIMIT 0,5");
while($strzz = mysql_fetch_assoc ($res)) {
echo '<td><a href="'.$strzz['id'].'"><img width="70" style="padding:4px;border:1px solid gray;" src="'.$strzz['post'].'"></a></td>';
}
}
}
 

singmen

Новичок
Бывает.
Я должен угадать, как именно ты пытаешься при этом использовать эту функцию – или ты сам покажешь?
PHP:
$z = $strz['title'];
foreach(explode(' ',$z) as $part){
if(strlen($part)>2){
$part = mysql_real_escape_string($part);
$part = array_unique($part);
$res=mysql_query("SELECT * FROM posts WHERE title LIKE '%$part%' LIMIT 0,5");
while($strzz = mysql_fetch_assoc ($res)) {
echo '<td><a href="'.$strzz['id'].'"><img width="70" style="padding:4px;border:1px solid gray;" src="'.$strzz['post'].'"></a></td>';
}
}
}
 

Andkorol

Новичок
Да уж...
Эту функцию нужно применять к массиву, по которому будет производится выборка материалов – для получения массива уникальных слов, т.е. удаления дублей повторяющихся слов.
Алгоритм простой:
– разбить строку на отдельные слова (explode)
– удалить дубли повторяющихся слов (array_unique)
– проход по массиву уникальных слов и выборка данных из БД по этим словам (foreach and so on...)
 

singmen

Новичок
Да уж...
Эту функцию нужно применять к массиву, по которому будет производится выборка материалов – для получения массива уникальных слов, т.е. удаления дублей повторяющихся слов.
Алгоритм простой:
– разбить строку на отдельные слова (explode)
– удалить дубли повторяющихся слов (array_unique)
– проход по массиву уникальных слов и выборка данных из БД по этим словам (foreach and so on...)
PHP:
$z = $strz['title'];
$z1 = explode(" ", $z);
$z1 = array_unique($z1);
foreach($z1 as $part){
if(strlen($part)>2){
$part = mysql_real_escape_string($part);
$res=mysql_query("SELECT * FROM posts WHERE title LIKE '%$part%' LIMIT 0,5");
while($strzz = mysql_fetch_assoc ($res)) {
echo '<td><a href="'.$strzz['id'].'"><img width="70" style="padding:4px;border:1px solid gray;" src="'.$strzz['post'].'"></a></td>';
}
}
}
Спасибо, все получилось.
 

fixxxer

К.О.
Партнер клуба
Попробуй использовать отступы в коде. Их придумали не просто так, а чтобы код был читаем.

PHP:
$z = $strz['title'];
$z1 = explode(" ", $z);
$z1 = array_unique($z1);
foreach($z1 as $part){
    if(strlen($part)>2){
        $part = mysql_real_escape_string($part);
        $res=mysql_query("SELECT * FROM posts WHERE title LIKE '%$part%' LIMIT 0,5");
        while($strzz = mysql_fetch_assoc ($res)) {
            echo '<td><a href="'.$strzz['id'].'"><img width="70" style="padding:4px;border:1px solid gray;" src="'.$strzz['post'].'"></a></td>';
        }
    }
}
Намного же понятнее стало, нет?
 

hell0w0rd

Продвинутый новичок
Скрипт выводит похожие материалы по названию, но есть ошибка, допустим название материала кот, кот, кот, скрипт будет выводить 5 материалов с 1 словом, потом 5 материалов со 2 словом и 5 с третьим, как исправить? чтоб всего 5.

PHP:
$z = $strz['title'];
foreach(explode(' ',$z) as $part){
if(strlen($part)>2){
$part = mysql_real_escape_string($part);
$res=mysql_query("SELECT * FROM posts WHERE title LIKE '%$part%' LIMIT 0,5");
while($strzz = mysql_fetch_assoc ($res)) {
echo '<td><a href="'.$strzz['id'].'"><img width="70" style="padding:4px;border:1px solid gray;" src="'.$strzz['post'].'"></a></td>';
}
}
}
К БД ЖЕ В ЦИКЛЕ ДОЛБИШЬСЯ!!!!!
PHP:
$titles = explode(' ', $strz['title']);
$titles = array_unique($titles);
$likes = array();
foreach($titles as $part){
    if(strlen($part) > 2){
        // так тоже плохо, используй mysqli
        $likes[] = ' title LIKE %\''.mysql_real_escape_string($part).'\'%';
    }
}
if(!empty($likes)){
    $res = mysql_query('SELECT * FROM posts WHERE '.implode(' OR ', $likes).' LIMIT 0,5');
    while($strzz = mysql_fetch_assoc ($res)) {
        // это вообще ужас, особенно стили инлайн
        echo '<td><a href="'.$strzz['id'].'"><img width="70" style="padding:4px;border:1px solid gray;" src="'.$strzz['post'].'"></a></td>';
    }
}
 

singmen

Новичок
К БД ЖЕ В ЦИКЛЕ ДОЛБИШЬСЯ!!!!!
PHP:
$titles = explode(' ', $strz['title']);
$titles = array_unique($titles);
$likes = array();
foreach($titles as $part){
    if(strlen($part) > 2){
        // так тоже плохо, используй mysqli
        $likes[] = ' title LIKE %\''.mysql_real_escape_string($part).'\'%';
    }
}
if(!empty($likes)){
    $res = mysql_query('SELECT * FROM posts WHERE '.implode(' OR ', $likes).' LIMIT 0,5');
    while($strzz = mysql_fetch_assoc ($res)) {
        // это вообще ужас, особенно стили инлайн
        echo '<td><a href="'.$strzz['id'].'"><img width="70" style="padding:4px;border:1px solid gray;" src="'.$strzz['post'].'"></a></td>';
    }
}
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in ...
 
Сверху