Упростить запрос в базу.

Barmaley

Новичок
Можно ли упростить запрос в базу?
echo mysql_num_rows(mysql_query("SELECT * FROM freeshipping where categories like '%wolf%'"));
echo mysql_num_rows(mysql_query("SELECT * FROM freeshipping where categories like '%rabbit%'"));
echo mysql_num_rows(mysql_query("SELECT * FROM freeshipping where categories like '%pig%'"));
echo mysql_num_rows(mysql_query("SELECT * FROM freeshipping where categories like '%bee%'"));
echo mysql_num_rows(mysql_query("SELECT * FROM freeshipping where categories like '%bear%'"));

как сделать через один запрос?
 

Вурдалак

Продвинутый новичок
PHP:
$r = mysql_query('SELECT * FROM freeshipping');

foreach (['wolf', 'rabbit', 'pig'] as $keyword) {
    while ($row = mysql_fetch_assoc($r)) {
        if (preg_match('/'.preg_quote($keyword, '/').'/i', $row['categories'])) {
            print_r($row);
        }
    }

    mysql_data_seek($r, 0);
}
 

Barmaley

Новичок
Почему-то выдает Parse error: syntax error, unexpected '[' в этой строке:
PHP:
foreach (['wolf', 'rabbit', 'pig'] as $keyword) {
 

artoodetoo

великий и ужасный
Если буквально то, о чем вы просите, то:
PHP:
$keywords = array('wolf', 'rabbit', 'pig');
$likes = array_map(
  function($s) { 
    return "(`categories` LIKE '%{$s}%')"; 
  }, 
  $keywords);
$str = implode(" OR ", $likes);
$sql = "SELECT * FROM `freeshipping` WHERE " . $str;
но было бы лучше иметь отдельную таблицу категорий и искать там без LIKE, а буквальное совпадение. плюс таблицу-связку для отношений многие-ко-многим чтобы эти категории привязать к целевой таблице. это будет по-взрослому.
 
Последнее редактирование:

Barmaley

Новичок
Если буквально то, о чем вы просите, то:
PHP:
$keywords = array('wolf', 'rabbit', 'pig');
$likes = array_map(
  function($s) { 
    return "(`categories` LIKE '%{$s}%')"; 
  }, 
  $keywords);
$str = implode(" OR ", $likes);
$sql = "SELECT * FROM `freeshipping` WHERE " . $str;
но было бы лучше иметь отдельную таблицу категорий и искать там без LIKE, а буквальное совпадение. плюс таблицу-связку для отношений многие-ко-многим чтобы эти категории привязать к целевой таблице. это будет по-взрослому.
А как здесь организовать вывод количества строк по каждому ключевому слову?

Может было бы и лучше сделать как Вы сказали, только это ещё не мой уровень :)
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
ну так надо поднимать уровень.

для начала перестать использовать mysql_* функции напрямую
 
Сверху