Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите, пожалуйста, дополнить запрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
__Lina__
Отправлено: 26 Апреля, 2009 - 17:19:38
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008  
Откуда: Москва


Помог: 0 раз(а)




Подскажите, пожалуйста! Сама я оч долго буду пробовать и вряд ли смогу сделать. Непосредственно с php малое время работаю, а тут такие умнички сидят, всегда поддержат дельным советом Улыбка
есть база с марками сталей- набор таблиц с разными свойствами.Есть вот такой скрипт для выборки всех нужных данных из таблицы с каким-либо свойством для определенной марки сталей и отрисовки html-таблицы

PHP:
скопировать код в буфер обмена
  1. <?
  2. // коннект к базе
  3. $conn = oci_connect("user", "pass", "database");
  4.  
  5. // выполнение запроса
  6. $sql = "SELECT * FROM tab";
  7. $res = OCIParse($conn, $sql);
  8. oci_execute($res);
  9.  
  10. //начало отрисовки таблицы
  11. echo "<TABLE BORDER=1>";
  12. echo "<TR>";
  13.  
  14. // отрисовка шапки таблицы
  15. for ($i = 1; $i-1 < oci_num_fields($res); $i++) {
  16. echo "<TH>";
  17. echo oci_field_name($res,$i);
  18. echo "</TH>";
  19. }
  20.  
  21. // отрисовка и заполнение самой таблицы
  22. while ($row = oci_fetch_row($res)) {
  23. echo "<TR>";
  24. for ($i = 0; $i < $fields=count($row); $i++) {
  25. echo "<TD>".$row[$i]."</TD>";
  26. }
  27. echo "</TR>";
  28. }
  29. echo "</TR></TABLE>";  
  30.     oci_close($conn)
  31. ?>;


бывают случаи, когда для какой-то стали один из столбцов таблицы бд не содержит в себе никаких занчений. Тогда скрипт отрисовывает шапку с названием столбца и соответсвенно пустые ячейки.
Можно ли как-то дополнить этот скрипт таким условием-"если для такой-то марки стали такое-то значение отсутсвует,то для него не отрисовывать столбец"?
Заранее спасибо
 
 Top
Champion Супермодератор
Отправлено: 26 Апреля, 2009 - 17:35:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Можно. Способов сразу куча в голову пришли. Только скажи сначала, мы можем по первой строке выборки судить о том какой столбец пустой или это не 100% ?
(Добавление)
Ну "куча" - это я преувеличил. Нормальных только 2. Когда на вопрос ответишь, напишу из них подходящий.
(Добавление)
В общем, если по первой строке можно судить, о том, какой столбец будет целиком пустым, то делаешь fetch одной только первой строки. После этого шапку строишь так же, как делала, но с условием, что в первой строке в этом столбце не пусто. Потом выводишь данные первой строки в таблицу, а потом всех отсальных также, если не пусто.
(Добавление)
Еще приходит в голову такая штука. Всю эту таблицу не построчно выводишь в браузер, а собираешь в строку. Потом str_replace('<td></td>', '', $tablitsa)
(Добавление)
Есть еще один способ. Напишу, если 2 первых не подойдут.
Кстати, я бы такие вещи не так организовывал. Таблицы: марки(марка, id_свойства, значение_свойства), свойства(id, назание). Если и "значение свойства" часто повторяется, то и это в отдельную таблицу.
 
 Top
__Lina__
Отправлено: 26 Апреля, 2009 - 18:31:23
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008  
Откуда: Москва


Помог: 0 раз(а)




А у меня так и организованы данные. Есть таблица марок сталей со столбцами id и marka. И есть таблицы со свойствами. Давай для наглядности прям по принтскрину экрана опишу ситуацию.
Для стали вСт6пс просмотрим таблицу механических свойств. Первые пять столбцов имеют какие-то значения, а последующие 7 пустые. Вот как сделать так, чтоб эти последние 7 столбцов вообще не отрисовывались в данном случе.
Прикреплено изображение (Нажмите для увеличения)
схема.jpg

(Отредактировано автором: 26 Апреля, 2009 - 18:36:22)

 
 Top
__Lina__
Отправлено: 26 Апреля, 2009 - 18:36:50
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008  
Откуда: Москва


Помог: 0 раз(а)




но бывают случаи, когда в первой строке какой-то столбец пустой, а в последующих -нет.(см. картинку) Там в столбце d4 данные появляются только в третьей строчке.
Прикреплено изображение (Нажмите для увеличения)
схема2.jpg
 
 Top
Champion Супермодератор
Отправлено: 26 Апреля, 2009 - 19:41:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




__Lina__ пишет:
А у меня так и организованы данные. Есть таблица марок сталей со столбцами id и marka. И есть таблицы со свойствами.
А можно структуру этих таблиц? И tab в запросе - это что?
 
 Top
__Lina__
Отправлено: 26 Апреля, 2009 - 19:54:43
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008  
Откуда: Москва


Помог: 0 раз(а)




таблица stali со столбцами stal_id(ай ди стали) и marka(название стали). Таблиц со свойстами у меня около 30 (механические свойства, физические свойства, предел выносливости и т.д.), но все они построены по одному принципу.Например,таблица механические свойства : stal_id, id(ай ди этой конкретной записи в таблице), termoobrabotka, sechenie, sb, s02, d5, d4, d10, psi, kcu, tverdost, hrb, hrc. Все таблицы со свойствами связаны с ключевой таблице марок по полю stal_id. В одной таблице со свойствами хранятся сведения об этом свойстве для всех сталей. Запросом мы отбираем только данные, относящиеся к нужной нам стали, и отрисовываем таблицу.
(Добавление)
а в листинге я привела обощенный запрос. tab - это название таблицы в общем случае. Т.е. у меня в коде есть sql запрос к базе для каждой из таблиц свойств -
SELECT * FROM meh_svoystva ;
SELECT * FROM fizich_svoystva; И т.д.
 
 Top
Champion Супермодератор
Отправлено: 26 Апреля, 2009 - 20:07:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Неудобно спроектирована БД. Это отличается от того, что я говорил. Очень. SQLем тут, как мне теперь представляется, не открутишься. Т.е. какие столбцы пустые - мы все-таки узнаем только после того, как просматриваем целиком выборку? Так получается?
 
 Top
__Lina__
Отправлено: 26 Апреля, 2009 - 20:11:49
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008  
Откуда: Москва


Помог: 0 раз(а)




Я просто до этого только учебную базу в access , а с php дела вообще не имела, но диплом писать надо, поэтому что смогла наваяла.
А про пустые столбцы - выходит, что так. Весь массив надо просмотреть сначала и оценить в нем каждую переменную. Вот я и задалась вопросом можно ли это реализовать)

(Отредактировано автором: 26 Апреля, 2009 - 20:12:44)

 
 Top
Champion Супермодератор
Отправлено: 26 Апреля, 2009 - 20:25:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Тогда надо так.
-определяешь количество свойств (N), как ты и делала.
-создаешь массив из N элементов со значениями false. i-й элемент соответствует i-му свойству.
-Таблицу на выводишь в браузер, а формируешь всё это в строку. Пустые свойства выводишь как %номерсвойства%? и попутно меняешь на true iй элемент, если i-e свойство очередной строки не пустое.
-теперь в этом массиве false остался только у тех элементов массива, в которых весь столбец пустой.
-в цикле по этому массиву делаешь если false str_replace("<td>%$i</td>", '', $tabl), а если true то false str_replace("%$i%", '-', $tabl).
Есть тут кривоватость, но с ней потом разберемся. Я спать пошел Улыбка
(Добавление)
__Lina__ пишет:
а с php дела вообще не имела
Тут не в php дело. А в проектировании БД. Не очень хорошо оно получилось
(Добавление)
Смотрю я на наши с тобой IP адреса и вижу: мой 95.220.9.227, твой 95.220.6.227. Бывает же такое)))
 
 Top
__Lina__
Отправлено: 26 Апреля, 2009 - 21:42:13
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008  
Откуда: Москва


Помог: 0 раз(а)




Ну первый блин комом)) уже поздно переделывать.
Суть твоего предложения поняла, но как-то пока затрудняюсь все это грамотно реализовать.... не поможешь?))
З.Ы. действительно с ip адресами необычное совпадение)
 
 Top
Champion Супермодератор
Отправлено: 27 Апреля, 2009 - 08:49:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Я даже знаю, к какому ты провайдеру подключена)) К тому же, которому я).
__Lina__ пишет:
Суть твоего предложения поняла, но как-то пока затрудняюсь все это грамотно реализовать.... не поможешь?))
Ну мне лень всё целиком. Ты скажи, какой пункт не получается, я его тебе поподробнее помогу.

А лучше, если ты попробуешь целиком сделать, а я тогда уже конкретные ошибки подправлю, если они будут
 
 Top
valenok
Отправлено: 27 Апреля, 2009 - 09:05:14
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Я вижу как вариант сначала другим запросом найти максимальный размер данных
в ячейках столбца.
--
Соседи =)

(Отредактировано автором: 27 Апреля, 2009 - 09:06:09)



-----
Truly yours, Sasha.
 
My status
 Top
Viper
Отправлено: 27 Апреля, 2009 - 09:18:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




а может через if сделать проверку на пустое значение ?

нечто вида
PHP:
скопировать код в буфер обмена
  1. if($row->parametr>'') echo '<td>'.$row->parametr.'<td>';
  2.  

поправьте если ошибся.

(Отредактировано автором: 27 Апреля, 2009 - 09:19:13)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Roler
Отправлено: 27 Апреля, 2009 - 13:05:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




Если я правильно понял, то if(empty($var)).
 
 Top
__Lina__
Отправлено: 27 Апреля, 2009 - 13:07:48
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008  
Откуда: Москва


Помог: 0 раз(а)




ну это понятно, что empty, я никак сообразить не могу как бы это так написать, чтоб эта переменная по всему столбцу проверялась, и если столбец полностью пустой получается, то не рисовать его
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB