За последние 24 часа нас посетили 20956 программистов и 1107 роботов. Сейчас ищут 429 программистов ...

Вывод из двух таблиц

Тема в разделе "PHP и базы данных", создана пользователем amen, 20 окт 2012.

  1. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Создаю новую тему по этому вопросу....

    Столкнулся с проблемой вывода отчета...
    Значит 2 таблицы


    Код (Text):
    1. `data`(
    2.                         `id` int NOT NULL AUTO_INCREMENT KEY,
    3.                         `objid` int NOT NULL,
    4.                         `date` date,
    5.                         `pl_min` TINYINT(1)
    6.  
    7. `objects`
    8.                         `id` int NOT NULL AUTO_INCREMENT KEY,
    9.                         `name` varchar(50),
    10.                         `orgname` varchar(50),
    11.                         `orient` varchar(150),
    12.                         `rating` int

    Надо вывести список всех объектов и расставить плюсы и минусы за каждый день определённого периода времени. То есть один объект на одну строку и одна дата на один столбец.
    Запрос в цикле это вроде как не гуд, так что пошёл смотреть как делают запросы сразу в тве таблицы. Что получилось:


    Код (Text):
    1. SELECT objects.id, objects.name, objects.orgname, objects.orient, objects.rating, data.objid, data.date, data.pl_min
    2.         FROM `objects`, `data`
    3.         WHERE objects.id = data.objid
    4.         ORDER BY objects.rating DESC

    получилось не очень - объекты в списке дублируются...
    Да и не совсем понимаю, как приплести в таблицу поля для дат...
    Дайте направление, плиз
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    сделай два запроса и не парься, а?
     
  3. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    приведите пример того что именно вы хотите получить
     
  4. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Вобщем сделал так:

    Код (Text):
    1. include 'mysql.php';
    2.  
    3. // Запрос на выборку объектов, посещённых хотя бы один раз
    4. $query = "SELECT * FROM `objects`
    5.           WHERE `rating` > 1
    6.           ORDER BY `rating` DESC";
    7.          
    8. $query = mysql_query($query);
    9.  
    10. if(!$query) echo mysql_error();
    11.  
    12.  
    13.  
    14. echo '<table border=1> <tr><td colspan=2 >&nbsp</td>';
    15. $from = $_POST['from'];
    16. $to   = $_POST['to'];
    17.  
    18. // Функция записи временного диапазона в массив
    19. function getDateRange($from, $to)
    20. {
    21. $t1 = strtotime($from);
    22. $t2 = strtotime($to) + 3600;
    23. $dates = array();
    24. for($i = $t1; $i <= $t2; $i += 86400)
    25. $dates[] = date("Y-m-d",$i);
    26. return $dates;
    27. }
    28. $dates = getDateRange($from, $to);
    29.  
    30. // Вывод дат диапазона в "шапку" таблицы
    31. foreach ($dates as $dt)
    32. {
    33.     $dt1   = $dt[8].$dt[9].'-'.$dt[5].$dt[6].'-'.$dt[0].$dt[1].$dt[2].$dt[3];
    34.     echo '<td>'. $dt1 .'</td>';
    35. }
    36. echo '</tr>';
    37.  
    38.  
    39. while($row = mysql_fetch_array($query))
    40. {
    41.     include 'rating_table.php';
    42. }
    43. echo '</table>';
    и rating_table.php:

    Код (Text):
    1. <tr>
    2.     <td><?php echo $row['name'];?></td>
    3.     <td><?php echo $row['orgname'];?></td>
    4.    
    5.     <?php foreach($dates as $dt)
    6.           {
    7.                 $q = "SELECT `pl_min` FROM `data`
    8.                           WHERE `date` = $dt AND `objid` = ". $row['id'];
    9.                 $q = mysql_query($q); if(!$q) {mysql_error();}
    10.          
    11.                 $plus = mysql_fetch_array($q);
    12.                 echo '<td>'. $plus['pl_min'] .'</td>';
    13.           }
    14.     ?>
    15. <tr>
    По идее все плюсы должны расставляться, однако этого не происходит...Возможно кривой запрос в цикле??