За последние 24 часа нас посетили 55548 программистов и 1716 роботов. Сейчас ищут 793 программиста ...

Проконсультируйте пожалуйста.

Тема в разделе "MySQL", создана пользователем yoyo-moyo, 17 ноя 2009.

  1. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    Всем добрый вечер.

    Есть запрос:
    PHP:
    1.  
    2. <?php  
    3.         $id=3;
    4.     $startdate = 2009-06-01;
    5.     $enddate = 2009-11-30;
    6.     $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";
    7.     $result = mysql_query($query);
    8. ?>
    9.  
    Подскажите как вместо like '%Googlebot%' подставить значения из другого массива , а вместо дат $startdate = 2009-06-01;
    и $enddate = 2009-11-30;

    Заранее спасибо.
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    кавычки, иначе у тебя посчитается как
    2009-11-30 = 1968
    2009-06-01 = 2002

    А подставлять точно так же как ты подставляешь $id
     
  3. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    Simpliest

    [sql]
    date>'$startdate' and date<'$enddate'
    [/sql]

    Так ?
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  5. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    Simpliest


    PHP:
    1.  
    2. <?
    3. $query = "SELECT date,tip FROM log where id_user=$id  and tip like '%Googlebot%' and date>'$startdate' and date<'$enddate' order by date";
    4. $result = mysql_query($query);
    5. ?>
    6.  
    Пустая таблица.....
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  7. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    А до этого были данные при подстановке дат......
    Где-то ошибка......
     
  8. Amatory999

    Amatory999 Активный пользователь

    С нами с:
    23 июн 2009
    Сообщения:
    93
    Симпатии:
    0
    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);
     
  9. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    между 2й и 3й строкой ставим

    var_dump($query);

    Если запрос именно такой какой хотели и в нем нет ошибок, то

    выполняем его в phpMyAdmin (или в консоли mysql);
    Смотрим результат.

    P.S. для ошибок mysql есть функция var_dump(mysql_error());
     
  10. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    Amatory999
    Спасибо большое, всё пошло... :}}}



    Simpliest
    var_dump(mysql_error()); - Ведь знал-жеж блин...
    Буду знать как отлаживаться, и спасибо...
     
  11. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    [sql]( date BETWEEN '$startdate' and '$enddate' )[/sql] лучше так.
     
  12. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    DarkElf

    Спасибо, так явно логичнее ....
    Поправьте пожалуйста ещё одно место:
    PHP:
    1.  
    2. <?
    3. $query = "SELECT spider_user_agent FROM spiders";
    4. $spiders = mysql_query($query);
    5. while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC))
    6.     ;
    7. $spider = mysql_real_escape_string($spider);
    8. $id = 3;
    9. $startdate = "2009-06-01";
    10. $enddate = "2009-11-30";
    11. $query = "SELECT date,tip FROM log WHERE id_user=$id  AND tip='$spider' AND date BETWEEN '$startdate' AND '$enddate'  order BY tip";
    12. $result = mysql_query($query);
    13. ?>
    14.  
    Из массива $spiders подстановка во второй запрос tip='$spider' выводит только те строки, где по ошибке есть только поле даты...
    Все остальные записи не выводятся , хотя есть совпадения типа spider_user_agent = tip .....
    Что-то не в порядке с подстановкой tip='$spider' ...
    Посмотрите пожалуйста.
     
  13. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Понял ничего. Что значит "где по ошибке есть только поле даты". Может быть тебе просто не AND а OR в запросе нужен?
     
  14. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    В таблице лог хранятся визиты с названиями(tip) по датам(date). Несколько строк косые - нет названий(tip) , а есть только даты(date)...
    Тоесть выбирает только строки с нулевым(пустым)tip, а должен выбирать совпадения со spider_user_agent ....
    Я надеюсь, что в первом массиве($spiders) именно эти значения(spider_user_agent)...
     
  15. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Не надо надеяться. Надо вывести на экран print_r($spiders) и посмотреть что там на самом деле.
     
  16. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    print_r($spiders) выводит какой-то идентификатор...
    В массиве данные есть, пробовал выводить:
    PHP:
    1.  
    2. <?
    3. $StartTime = microtime(true);
    4. $query = "SELECT spider_user_agent FROM spiders";
    5. $spiders = mysql_query($query);
    6. print "<center><h1>Список пауков.</h1></center>\n<table width='800'; border='1'>\n";
    7. while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC))
    8. {
    9.     print "\t<tr>\n";
    10.     foreach ($spider as $col_value)
    11.     {
    12.         print "\t\t<td>$col_value</td>\n";
    13.     }
    14.     print "\t</tr>\n";
    15. }
    16. print "</table>\n";
    17. $EndTime = microtime(true);
    18. echo 'Запрос "$spiders" выполнен за ' . number_format($EndTime - $StartTime, 6) .
    19.     ' секунд';
    20. echo '<br/>';
    21. $StartTime = microtime(true);
    22. $spider = mysql_real_escape_string($spider);
    23. $id = 3;
    24. $startdate = "2009-06-01";
    25. $enddate = "2009-11-30";
    26. $query = "SELECT date,tip FROM log WHERE id_user=$id  AND tip='$spider' AND date BETWEEN '$startdate' AND '$enddate'  order BY tip";
    27. $result = mysql_query($query);
    28. print "<center><h1>Список совпадений в логе.</h1></center>\n<table width='800'; border='1'>\n";
    29. while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
    30. {
    31.     print "\t<tr>\n";
    32.     foreach ($line as $col_value)
    33.     {
    34.         print "\t\t<td>$col_value</td>\n";
    35.     }
    36.     print "\t</tr>\n";
    37. }
    38. print "</table>\n";
    39. $EndTime = microtime(true);
    40. echo 'Запрос "$result" выполнен за ' . number_format($EndTime - $StartTime, 6) .
    41.     ' секунд';
    42. echo '<br/>';
    43. ?>
    44.  
    Выводится список пауков и пустые строчки лога, совпадения не выводит....
     
  17. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    1. это потому что $spiders - не массив а ресурс.
    2. сделай echo $spider в 20 строке.
     
  18. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    Ничего не выводит ;[[[[[[[
    А как подставить(сформировать) массив значений из таблицы spiders для подстановки?
     
  19. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    ты же только что распечатывал все эти значения. Неужели трудно их в массив запихнуть? И кстати, зачем тебе массив и как ты его собираешься пихать в запрос?
    PHP:
    1. <?
    2. while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC))
    3. {
    4.      print "\t<tr>\n";
    5.      foreach ($spider as $col_value)
    6.      {
    7.          $spiders_array[]=$col_value;
    8.      }
    9.  }
    После этого у тебя будет массив $spiders_array.
     
  20. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    karakh

    Не знаю, честно.... Нужно перебрать значения из первой таблицы на совпадения во второй и вывести результат..
    А "прорграммист" я ещё тот, как могу так и пробую , всю ночь просидел в мануалах - пока не полегчало(аж стыдно блин)...
     
  21. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    пихай массив в строку
    $spiders_str=implode (",",$spiders_array);

    а в запросе WHERE id_user=$id AND tip IN '$spiders_str'...
     
  22. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    PHP:
    1.  
    2. <?php
    3.  
    4. include ('header.php');
    5.  
    6. $query = "SELECT spider_user_agent FROM spiders";
    7. $spiders = mysql_query($query);
    8. while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC))
    9. {
    10.     foreach ($spider as $col_value)
    11.     {
    12.         $spiders_array[] = $col_value;
    13.     }
    14. }
    15. $spiders_str = implode(",", $spiders_array);
    16. $StartTime = microtime(true);
    17. $id = 3;
    18. $startdate = "2009-06-01";
    19. $enddate = "2009-11-30";
    20. $query = "SELECT date,tip FROM log WHERE id_user=$id AND tip IN '$spiders_str' AND date BETWEEN '$startdate' AND '$enddate'  order BY tip";
    21. $result = mysql_query($query);
    22. print "<center><h1>Список совпадений в логе.</h1></center>\n<table width='800'; border='1'>\n";
    23. while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
    24. {
    25.     print "\t<tr>\n";
    26.     foreach ($line as $col_value)
    27.     {
    28.         print "\t\t<td>$col_value</td>\n";
    29.     }
    30.     print "\t</tr>\n";
    31. }
    32. print "</table>\n";
    33. $EndTime = microtime(true);
    34. echo 'Запрос "$result" выполнен за ' . number_format($EndTime - $StartTime, 6) .
    35.     ' секунд';
    36. echo '<br/>';
    37.  
    38. $smarty = new Smarty;
    39. $smarty->debugging = false;
    40. $smarty->caching = true;
    41. $smarty->cache_lifetime = 120;
    42.  
    43. $smarty->display('stat.tpl');
    44. include ('footer.php');
    45.  
    46. ?>
    47.  
    Если так , то :
    Код (Text):
    1.  
    2. 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
    3.  
    4. 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
    Неправильно вставил , или ещё где-то ошибка?
     
  23. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    мой глюк
    $spiders_str="'".implode ("','",$spiders_array)."'";

    и
    tip IN ('$spiders_str')...
     
  24. yoyo-moyo

    yoyo-moyo Активный пользователь

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    PHP:
    1.  
    2. <?php
    3.  
    4. include ('header.php');
    5.  
    6. $query = "SELECT spider_user_agent FROM spiders";
    7. $spiders = mysql_query($query);
    8. while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC))
    9. {
    10.     foreach ($spider as $col_value)
    11.     {
    12.         $spiders_array[] = $col_value;
    13.     }
    14. }
    15. $spiders_str="'".implode ("','",$spiders_array)."'";
    16. $id = 3;
    17. $startdate = "2009-06-01";
    18. $enddate = "2009-11-30";
    19. $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";
    20. $result = mysql_query($query);
    21. print "<center><h1>Список совпадений в логе.</h1></center>\n<table width='800'; border='1'>\n";
    22. while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
    23. {
    24.     print "\t<tr>\n";
    25.     foreach ($line as $col_value)
    26.     {
    27.         print "\t\t<td>$col_value</td>\n";
    28.     }
    29.     print "\t</tr>\n";
    30. }
    31. print "</table>\n";
    32.  
    33. $smarty = new Smarty;
    34. $smarty->debugging = false;
    35. $smarty->caching = true;
    36. $smarty->cache_lifetime = 120;
    37.  
    38. $smarty->display('stat.tpl');
    39. include ('footer.php');
    40.  
    41. ?>
    42.  
    Ошибка :
    Код (Text):
    1.  
    2. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /stat.php on line 21
    :[[[[[[[[[[
    Ты на меня не сердись, я с листа практически не читаю , почему неверный аргумент не нашёл...
     
  25. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    сделай echo $query; посмотри на уже сформированный запрос и что там не так.