Всем добрый вечер. Есть запрос: PHP: <?php $id=3; $startdate = 2009-06-01; $enddate = 2009-11-30; $query = "SELECT date,tip FROM log where id_user=$id and tip like '%Googlebot%' and date>'2009-06-01' and date<'2009-11-30' order by date"; $result = mysql_query($query); ?> Подскажите как вместо like '%Googlebot%' подставить значения из другого массива , а вместо дат $startdate = 2009-06-01; и $enddate = 2009-11-30; Заранее спасибо.
кавычки, иначе у тебя посчитается как 2009-11-30 = 1968 2009-06-01 = 2002 А подставлять точно так же как ты подставляешь $id
Simpliest PHP: <? $query = "SELECT date,tip FROM log where id_user=$id and tip like '%Googlebot%' and date>'$startdate' and date<'$enddate' order by date"; $result = mysql_query($query); ?> Пустая таблица.....
yoyo-moyo, не про те кавычки говорил Simpliest, $id=3; $startdate = "2009-06-01"; $enddate = "2009-11-30"; $query = "SELECT date,tip FROM log where id_user=$id and tip like '%Googlebot%' and date>'$startdate' and date<'$enddate' order by date"; $result = mysql_query($query);
между 2й и 3й строкой ставим var_dump($query); Если запрос именно такой какой хотели и в нем нет ошибок, то выполняем его в phpMyAdmin (или в консоли mysql); Смотрим результат. P.S. для ошибок mysql есть функция var_dump(mysql_error());
Amatory999 Спасибо большое, всё пошло... :}}} Simpliest var_dump(mysql_error()); - Ведь знал-жеж блин... Буду знать как отлаживаться, и спасибо...
DarkElf Спасибо, так явно логичнее .... Поправьте пожалуйста ещё одно место: PHP: <? $query = "SELECT spider_user_agent FROM spiders"; $spiders = mysql_query($query); while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC)) ; $spider = mysql_real_escape_string($spider); $id = 3; $startdate = "2009-06-01"; $enddate = "2009-11-30"; $query = "SELECT date,tip FROM log WHERE id_user=$id AND tip='$spider' AND date BETWEEN '$startdate' AND '$enddate' order BY tip"; $result = mysql_query($query); ?> Из массива $spiders подстановка во второй запрос tip='$spider' выводит только те строки, где по ошибке есть только поле даты... Все остальные записи не выводятся , хотя есть совпадения типа spider_user_agent = tip ..... Что-то не в порядке с подстановкой tip='$spider' ... Посмотрите пожалуйста.
Понял ничего. Что значит "где по ошибке есть только поле даты". Может быть тебе просто не AND а OR в запросе нужен?
В таблице лог хранятся визиты с названиями(tip) по датам(date). Несколько строк косые - нет названий(tip) , а есть только даты(date)... Тоесть выбирает только строки с нулевым(пустым)tip, а должен выбирать совпадения со spider_user_agent .... Я надеюсь, что в первом массиве($spiders) именно эти значения(spider_user_agent)...
print_r($spiders) выводит какой-то идентификатор... В массиве данные есть, пробовал выводить: PHP: <? $StartTime = microtime(true); $query = "SELECT spider_user_agent FROM spiders"; $spiders = mysql_query($query); print "<center><h1>Список пауков.</h1></center>\n<table width='800'; border='1'>\n"; while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC)) { print "\t<tr>\n"; foreach ($spider as $col_value) { print "\t\t<td>$col_value</td>\n"; } print "\t</tr>\n"; } print "</table>\n"; $EndTime = microtime(true); echo 'Запрос "$spiders" выполнен за ' . number_format($EndTime - $StartTime, 6) . ' секунд'; echo '<br/>'; $StartTime = microtime(true); $spider = mysql_real_escape_string($spider); $id = 3; $startdate = "2009-06-01"; $enddate = "2009-11-30"; $query = "SELECT date,tip FROM log WHERE id_user=$id AND tip='$spider' AND date BETWEEN '$startdate' AND '$enddate' order BY tip"; $result = mysql_query($query); print "<center><h1>Список совпадений в логе.</h1></center>\n<table width='800'; border='1'>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { print "\t<tr>\n"; foreach ($line as $col_value) { print "\t\t<td>$col_value</td>\n"; } print "\t</tr>\n"; } print "</table>\n"; mysql_free_result($result); $EndTime = microtime(true); echo 'Запрос "$result" выполнен за ' . number_format($EndTime - $StartTime, 6) . ' секунд'; echo '<br/>'; ?> Выводится список пауков и пустые строчки лога, совпадения не выводит....
Ничего не выводит ;[[[[[[[ А как подставить(сформировать) массив значений из таблицы spiders для подстановки?
ты же только что распечатывал все эти значения. Неужели трудно их в массив запихнуть? И кстати, зачем тебе массив и как ты его собираешься пихать в запрос? PHP: <? while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC)) { print "\t<tr>\n"; foreach ($spider as $col_value) { $spiders_array[]=$col_value; } } После этого у тебя будет массив $spiders_array.
karakh Не знаю, честно.... Нужно перебрать значения из первой таблицы на совпадения во второй и вывести результат.. А "прорграммист" я ещё тот, как могу так и пробую , всю ночь просидел в мануалах - пока не полегчало(аж стыдно блин)...
пихай массив в строку $spiders_str=implode (",",$spiders_array); а в запросе WHERE id_user=$id AND tip IN '$spiders_str'...
PHP: <?php include ('header.php'); $query = "SELECT spider_user_agent FROM spiders"; $spiders = mysql_query($query); while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC)) { foreach ($spider as $col_value) { $spiders_array[] = $col_value; } } $spiders_str = implode(",", $spiders_array); $StartTime = microtime(true); $id = 3; $startdate = "2009-06-01"; $enddate = "2009-11-30"; $query = "SELECT date,tip FROM log WHERE id_user=$id AND tip IN '$spiders_str' AND date BETWEEN '$startdate' AND '$enddate' order BY tip"; $result = mysql_query($query); print "<center><h1>Список совпадений в логе.</h1></center>\n<table width='800'; border='1'>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { print "\t<tr>\n"; foreach ($line as $col_value) { print "\t\t<td>$col_value</td>\n"; } print "\t</tr>\n"; } print "</table>\n"; mysql_free_result($result); $EndTime = microtime(true); echo 'Запрос "$result" выполнен за ' . number_format($EndTime - $StartTime, 6) . ' секунд'; echo '<br/>'; $smarty = new Smarty; $smarty->debugging = false; $smarty->caching = true; $smarty->cache_lifetime = 120; $smarty->display('stat.tpl'); include ('footer.php'); ?> Если так , то : Код (Text): Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/clients/client1/web1/web/top/stat.php on line 22 Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /var/www/clients/client1/web1/web/top/stat.php on line 32 Неправильно вставил , или ещё где-то ошибка?
PHP: <?php include ('header.php'); $query = "SELECT spider_user_agent FROM spiders"; $spiders = mysql_query($query); while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC)) { foreach ($spider as $col_value) { $spiders_array[] = $col_value; } } $spiders_str="'".implode ("','",$spiders_array)."'"; $id = 3; $startdate = "2009-06-01"; $enddate = "2009-11-30"; $query = "SELECT date,tip FROM log WHERE id_user=$id AND tip tip IN ('$spiders_str') AND date BETWEEN '$startdate' AND '$enddate' order BY tip"; $result = mysql_query($query); print "<center><h1>Список совпадений в логе.</h1></center>\n<table width='800'; border='1'>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { print "\t<tr>\n"; foreach ($line as $col_value) { print "\t\t<td>$col_value</td>\n"; } print "\t</tr>\n"; } print "</table>\n"; $smarty = new Smarty; $smarty->debugging = false; $smarty->caching = true; $smarty->cache_lifetime = 120; $smarty->display('stat.tpl'); include ('footer.php'); ?> Ошибка : Код (Text): Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /stat.php on line 21 :[[[[[[[[[[ Ты на меня не сердись, я с листа практически не читаю , почему неверный аргумент не нашёл...