За последние 24 часа нас посетили 16133 программиста и 1666 роботов. Сейчас ищут 929 программистов ...

Помогите отладить sql запрос...

Тема в разделе "PHP для новичков", создана пользователем yoyo-moyo, 15 ноя 2009.

  1. yoyo-moyo

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

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    Доброе всем время суток.

    Помогите пожалуйста сделать грамотный запрос к базе:
    из таблицы names нужно вывести список имён и сравнить его с соответствующим полем таблицы grafik с датами и распечаткой результатов.
    Вот что я накорявил :
    PHP:
    1.  
    2. <?php
    3. $names= mysql_query("SELECT name FROM names");
    4. $name= mysql_fetch_array($names, MYSQL_NUM);
    5.  
    6.    
    7.  
    8. $result = mysql_query("SELECT date,name FROM grafik WHERE name LIKE '$name'");
    9. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    10.     printf("Date: %s - Name: %s <br/>", $row[0], $row[1]);  
    11. }
    12.  
    13. ?>
    14.  
    Только громко не смейтесь :oops:
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    непонял, надо взять имена из первой таблицы, прогнать их по второй таблице и в итоге вывести колонки из второй таблицы?
    Время суток совсем не доброе, спать пора)
    зы: ето что сайт про спайдермена там ? :D
     
  3. yoyo-moyo

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

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

    А почему про спайдермена???
     
  4. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    yoyo-moyo
    Про спайдермена и не спорьте!!!! :DDD
    ЗЫ: чёто типа того

    PHP:
    1. $query ="SELECT * from `names`  name";
    2.     $result = mysql_query($query,$link);
    3.    
    4.     while ($resulttoarray = mysql_fetch_array($result))
    5.     {
    6.       $name=$resulttoarray['name'];
    7.       $query ="SELECT * from `grafik`  where name='$name'";
    8.       $result = mysql_query($query,$link);
    9.       $resulttoarray = mysql_fetch_array($result)
    10.       $date=$resulttoarray['date'];
    11.       echo "$name","$date",'<br>';
    12.         }
    подправьте под себя
    зыы: я новичек и долго не спал(( ну примерно так
     
  5. yoyo-moyo

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

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    Спасибо...
    Пошёл за напильником...(подправлять) ;}}}
     
  6. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    yoyo-moyo
    та тут по идее тока коннект к базе надо свой поставить, а честно башка уже не варит если ошибка в логике я не виноват :D
    А сайт всёравно про спайдермена! :D
     
  7. yoyo-moyo

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

    С нами с:
    11 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Latvija
    Да вываливает ошибку:
    Код (Text):
    1.  
    2. mysql_query(): supplied argument is not a valid MySQL-Link resource
    Ну про спайдермена, так про спайдермена....
     
  8. yoyo-moyo

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

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

    Долго мучился , родил такую выборку из базы:
    PHP:
    1.  
    2. <?php
    3.     /* Выполняем SQL-запрос на аналитику пауков и вывод списка (не знаю как передать массив пауков без распечатки) */
    4.     $query = "SELECT spider_user_agent FROM spiders";
    5.     $spiders = mysql_query($query);
    6.    
    7.     /* Выводим результаты в html */
    8.     print "<center><h1>Список пауков.</h1></center>\n<table width='800'; border='1'>\n";
    9.     while ($spider = mysql_fetch_array($spiders, MYSQL_ASSOC)) {
    10.         print "\t<tr>\n";
    11.         foreach ($spider as $list) {
    12.         print "\t\t<td>$list</td>\n";
    13.         }
    14.         print "\t</tr>\n";
    15.         }
    16.         print "</table><br/>";
    17.    
    18.     /* Выполняем SQL-запрос аналитики лога на совпадения по паукам */
    19.     $query = "SELECT date,tip FROM log where tip like '%$spider%' order by tip";
    20.     $result = mysql_query($query);
    21.  
    22.     /* Выводим результаты в html */
    23.     print "<center><h1>Список совпадений в логе.</h1></center>\n<table width='800'; border='1'>\n";
    24.     while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    25.         print "\t<tr>\n";
    26.         foreach ($line as $col_value) {
    27.             print "\t\t<td>$col_value</td>\n";
    28.         }
    29.         print "\t</tr>\n";
    30.         }
    31.         print "</table>\n";
    32.  
    33.     /* Освобождаем память от результата */
    34.     mysql_free_result($spiders);
    35.     mysql_free_result($result);
    36. ?>
    37.  
    Помогите отладить и убрать лишнее, список пауков с датами выводит на при длине лога ~ 250000 записей результат приходится ждать минуту.....
    Понимаю , что накосорылил лишнего , но по другому пока не умею....
    Распечатка списка пауков нге нужна, но подругому не делает выборку из лога...

    Заранее спасибо.
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    А Вам обязательно нужен Like
    Код (Text):
    1. like '%$spider%'
    ??
     
  10. yoyo-moyo

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

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

    Домучился вот до такого:
    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. $StartTime = microtime(true);
    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 like '$spider' and date>'$startdate' and date<'$enddate' order by tip";
    12. $result = mysql_query($query);
    13. print "<center><h1>Список совпадений в логе.</h1></center>\n<table width='800'; border='1'>\n";
    14. while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
    15. {
    16.     print "\t<tr>\n";
    17.     foreach ($line as $col_value)
    18.     {
    19.         print "\t\t<td>$col_value</td>\n";
    20.     }
    21.     print "\t</tr>\n";
    22. }
    23. print "</table>\n";
    24. $EndTime = microtime(true);
    25. echo 'Запрос "$result" выполнен за ' . number_format($EndTime - $StartTime,
    26.     6) . ' секунд';
    27. echo '<br/>';
    28. ?>
    29.  
    Выводит только несколько строк, где видимо по ошибке не записано ничего кроме даты ...
    Остальной массив $spider игнорируется...
    Где-то неправильно обрабатывается первый массив , а где и как не вижу...
    Поправьте "программиста" :}}}}}}} пожалуйста...
    Из первого массива можно распечатать полный список , а подставляться не хочет...
     
  11. mrbig66

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

    С нами с:
    24 ноя 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    msk
    А зачем столько циклов?
    При тысячах записей в таблице names у вас начнутся тормоза.
    Неправильная структура БД, она избыточна.

    table1: names

    id | name

    table2: grafik

    id | id_name | date


    [sql]

    SELECT
    gr.id AS id,
    gr.date AS date,
    nm.name AS name

    FROM names AS nm

    LEFT JOIN grafik AS gr
    ON gr.id_name = nm.id

    [/sql]



    PHP:
    1. <?php
    2.  
    3.  
    4. $result = mysql_query('Запрос выше');
    5. while ($row = mysql_fetch_object($result))
    6.   printf("Date: %s - Name: %s <br/>", $row->date, $row->name);
    7.  
    8. ?>
    9.