Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Таблица в PHP из множества запросов из БД
 
 автор: isumin   (06.06.2014 в 18:42)   письмо автору
 
 

Добрый день! Не нашел подходящий тему, пришлось создать новую. Основная суть проблемы не могу правильно объединить ячейки. А теперь по порядку:
Есть два запроса к БД $query1 и $query2 в результате этих запросов формируется массив:
$query1:
vid | Koll |
2 | 4 |
4 | 3 |
$query2:
a1 | a2 | a3 | a4 |
55 | 42 | 5 | 4 |
12 | 22 | 25 | 25 |
55 | 42 | 5 | 4 |
12 | 22 | 25 | 25 |
55 | 42 | 5 | 4 |
12 | 22 | 25 | 25 |

дальше делаю два цикла ( при этом уже шапка таблицы сделана)

$row1=mysql_fetch_array($query1);
do {
echo "<tr><td rowspan=$row1['koll']>";
echo $row1['vid'];
echo "</td></tr>";
}
while($row1=mysql_fetch_array($query1));




$row2=mysql_fetch_array($query2);
do {
echo "<tr><td>";
echo $row2['a1'];
echo "</td><td>";
echo $row2['a2'];
echo "</td><td>";
echo $row2['a3'];
echo "</td><td>";
echo $row2['a4'];
echo "</td></tr>";
}
while($row2=mysql_fetch_array($query2))


со вторым циклом проблем нет, да и с первым бы не было если не нужно было объединить строки в одном столбце на число Koll с первого запрос.
В результате этого PHP кода получается что с первого цикла формируется обедненная ячейка на Koll строк, а следом за ней формируется вторая ячейка так же обеднённая, но размещена она не под первой как требуется, а правее. В чем проблема понять не могу. Повторюсь, если не ставить объединение (rowspan=$row1['koll']), то все нормально ячейка располагается ниже другой.

  Ответить  
 
 автор: tvv123456   (06.06.2014 в 19:01)   письмо автору
 
   для: isumin   (06.06.2014 в 18:42)
 

Печалька :)
Привидите HTML код который генерирует данный скрипт думаю, сделав это вы сами увидите ошибку
pS: В данном случае do .... while не к месту.

  Ответить  
 
 автор: isumin   (06.06.2014 в 19:09)   письмо автору
 
   для: tvv123456   (06.06.2014 в 19:01)
 

>pS: В данном случае do .... while не к месту.

Лучше использовать? -

while ($row2 = mysql_fetch_assoc($query2))
{

}


Но над основной проблемой я так и не разобрал. в каком направлении двигаться?
Я очень не давно в PHP по этому не сразу вижу в чем ошибка(((( подскажите пож.

  Ответить  
 
 автор: tvv123456   (06.06.2014 в 19:12)   письмо автору
 
   для: isumin   (06.06.2014 в 19:09)
 

>Лучше использовать? -
>

>while ($row2 = mysql_fetch_assoc($query2))
>{
>
>}
>


Ну, как по мне дак чуток по-лучше.
>
>Но над основной проблемой я так и не разобрал. в каком направлении двигаться?
>Я очень не давно в PHP по этому не сразу вижу в чем ошибка(((( подскажите пож.

Какой HTML код генерит ваш скрипт(В браузере правой кнопкой по странице и там искать что-то связанное с HTML)?

  Ответить  
 
 автор: isumin   (06.06.2014 в 19:15)   письмо автору
 
   для: tvv123456   (06.06.2014 в 19:12)
 


<html>
<link rel="stylesheet" type="text/css" href="style.css" />

<body>
<table border="1">
<tr>
<th class="vertikal_text">№ Квартал</th>
<th class="vertikal_text">№ Выдел</th>
<th class="vertikal_text">Площадь, га</th>
<th class="vertikal_text">Запас на выделе, куб.м.</th>
<th class="vertikal_text">Класс товарности</th>
<th class="vertikal_text">Состав насаждения</th>
<th class="vertikal_text">средний диаметр, см.</th>
<th class="vertikal_text">Запас на 1 га. куб.м</th>
<th class="vertikal_text">Остав. в семенных куртинах илиполосах куб.м</th>
<th class="vertikal_text">Крупная</th>
<th class="vertikal_text">Средняя</th>
<th class="vertikal_text">Мелкая</th>
<th class="vertikal_text">Дрова</th>
<th class="vertikal_text">Ликвид</th>
<th class="vertikal_text">Отходы</th>
<th class="vertikal_text">Всего древесной массы</th>
</tr>


<!--error--><br />
<b>Warning</b>:  implode() [<a href='function.implode'>function.implode</a>]: Invalid arguments passed in <b>Z:\home\localhost\www\Tab.php</b> on line <b>46</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script><!--error--><br />
<b>Warning</b>:  implode() [<a href='function.implode'>function.implode</a>]: Invalid arguments passed in <b>Z:\home\localhost\www\Tab.php</b> on line <b>55</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script>Array
(
    [0] => 
)
<!--error--><br />
<b>Warning</b>:  mysql_num_rows() expects parameter 1 to be resource, boolean given in <b>Z:\home\localhost\www\Tab.php</b> on line <b>59</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script><tr><td rowspan="3"></td></tr><!--error--><br />
<b>Warning</b>:  implode() [<a href='function.implode'>function.implode</a>]: Invalid arguments passed in <b>Z:\home\localhost\www\Tab.php</b> on line <b>74</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script><!--error--><br />
<b>Warning</b>:  mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in <b>Z:\home\localhost\www\Tab.php</b> on line <b>78</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script><!--error--><br />
<b>Warning</b>:  mysql_fetch_array() expects parameter 1 to be resource, boolean given in <b>Z:\home\localhost\www\Tab.php</b> on line <b>88</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><!--error--><br />
<b>Warning</b>:  mysql_fetch_array() expects parameter 1 to be resource, boolean given in <b>Z:\home\localhost\www\Tab.php</b> on line <b>121</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script>


</table>

</body>
</html>



  Ответить  
 
 автор: tvv123456   (06.06.2014 в 19:21)   письмо автору
 
   для: isumin   (06.06.2014 в 19:15)
 

вы с warning разберитесь.
Скорей всего что-то с запросом в базу. Когда пишите запрос, то для диагностики делайте что-нибудь вроде:

<?
......
mysql_query("тут запрос") or die(mysql_error());
....

в данном случае будет выводиться ошибка, которая возникла при запросе к базе.

  Ответить  
 
 автор: isumin   (06.06.2014 в 19:23)   письмо автору
 
   для: tvv123456   (06.06.2014 в 19:21)
 

Спасибо! Теперь хоть понятно в каком направлении двигаться дальше.

$query1 = mysql_query("select
g.vid as vid,
COUNT(g.vid)+1 as koll
FROM tax as g
where g.kv=$kv and g.vid in (".implode(',',$str).")
GROUP BY g.vid "
);




Вроде работает

  Ответить  
 
 автор: tvv123456   (06.06.2014 в 19:29)   письмо автору
 
   для: isumin   (06.06.2014 в 19:23)
 

даже не знаю, что сказать :(
Вы вообще знаете, что значит каждая строчка данного запроса и что она делает?

  Ответить  
 
 автор: isumin   (06.06.2014 в 19:44)   письмо автору
 
   для: tvv123456   (06.06.2014 в 19:29)
 

В принципе да.

Имеется таблица в БД :
vid kv
2 1
2 1
2 1
3 1
3 1


дальше запросом выбираем уникальные значение колонки vid (проще сказать группируем GROUP BY g.vid) но при этом необходимо потом объединить ячейки на количество определенных vid, для этого мы определяем сколько строк сгруппировалось в одну строка и прибавляем единицу( точно не могу сказать зачем прибавляем единицу, было практический изучено что не хватает одной строки) (COUNT(g.vid)+1 as koll)
и все это при условии что g.kv равен данным внесенных в форме ввода и множеству данных $str ($str имеет вид данных через запятую 5,4,3,8 и т.д.)

select
g.vid as vid2, -
COUNT(g.vid)+1 as koll
FROM taxsaz as g
where g.kv=$kv and g.vid in (".implode(',',$str)."
GROUP BY g.vid "

  Ответить  
 
 автор: tvv123456   (06.06.2014 в 20:12)   письмо автору
 
   для: isumin   (06.06.2014 в 19:44)
 

да просто в первом варианте было g.vid as vid - ерунда какая-то.

  Ответить  
 
 автор: isumin   (06.06.2014 в 20:17)   письмо автору
 
   для: tvv123456   (06.06.2014 в 20:12)
 

Да по сути у меня по моему сам подход решения задачи не правильно выбран был, скорей всего надо все заново начинать.

  Ответить  
 
 автор: isumin   (07.06.2014 в 21:36)   письмо автору
 
   для: isumin   (06.06.2014 в 18:42)
 

Проблему не решил, но нашел описание альтернативного метода. может кто подробнее объяснить как это сделать?
"Могу предложить другой подход -- без rowspan'ов, с выводом пустой ячейки. Механизма примерно такая:
1. Запоминаем и выводим значение ячейки в первой строке
2. Для всех последующих:
3. если значение совпадает с запомненным -- выводим пустую ячейку (<td></td>)
4. иначе снова запоминаем и выводим ячейку
5. goto 2 пока не добежим до конца"

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования