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]   

> Без описания
event
Отправлено: 20 Февраля, 2015 - 14:37:55
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


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




Написал такой код, для поиск похожих публикаций:

PHP:
скопировать код в буфер обмена
  1. function sqlwildcardesc($x) {
  2.         global $mysqli;
  3. return str_replace(array("%","_"), array("\\%","\\_"), $mysqli->real_escape_string($x));
  4. }
  5.  
  6. preg_match_all('/([а-яА-Я]+)/siu', $row['name'], $rus);
  7. preg_match_all('/([a-zA-Z]+)/si', $row['name'], $eng);
  8.  
  9. $rus = sqlwildcardesc(trim(implode(" ", $rus[0])));
  10. $eng = sqlwildcardesc(trim(implode(" ", $eng[0])));
  11.  
  12. if (!empty($rus) && !empty($eng))
  13.         $query = "(l.name LIKE '%$rus%' OR l.name LIKE '%$eng%')";
  14. elseif (!empty($rus) && empty($eng))
  15.         $query = "l.name LIKE '%$rus%'";
  16. else
  17.         $query = "l.name LIKE '%$eng%'";
  18.  
  19. $similar = $mysqli->query("SELECT l.id, l.textid, l.name, l.categoryid, c.cat_name FROM lists as l LEFT JOIN categories AS c ON l.categoryid = c.id WHERE $query AND l.id <> " . $id . " LIMIT 10") or sqlerr(__FILE__, __LINE__, $mysqli->error);
  20.         if ($similar->num_rows > 0) {
  21.         ?>
  22.        
  23. <h2>Читайте также</h2>
  24.  
  25. <?PHP
  26.                 while ($row = $similar->fetch_array())
  27.         {
  28.                 $text_my_view = $mysqli->query("SELECT text FROM texts WHERE id = " . $row['textid']) or sqlerr(__FILE__, __LINE__, $mysqli->error);
  29.                 $row_twoxxx = $text_my_view->fetch_array();
  30.                 echo "<li>- <a target=\"_blank\" href=\"/" . mb_strtolower($row['cat_name']) . "/view/" . $row['textid'] . "_" . title_name($row['name']) . "\">" . $row['name'] . "</a> <p>" . short(strip_tags($row_twoxxx['text']), 500) . " <a target=\"_blank\" href=\"/" . mb_strtolower($row['cat_name']) . "/view/" . $row['textid'] . "_" . title_name($row['name']) . "\">[читать подробенее]</a></p></li> <br />";
  31.         }
  32.        }
  33.  


Работает. Но долготовато. Есть идеи как оптимизировать?
 
 Top
likvidator
Отправлено: 20 Февраля, 2015 - 19:42:07
Post Id


Посетитель


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


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

[+]


как минимум - избавиться от запроса в цикле... юзайте джоины или IN... Точно не скажу,не вникал+нет структуры. Но сколько id'шников= столько запросов- это bad
 
 Top
gephaest
Отправлено: 20 Февраля, 2015 - 21:24:37
Post Id



Новичок


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


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




Я бы еще рекомендовал отделить логику от вывода, у вас мешанина нечитаемая Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB