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 :: Помогите, пожалуйста, дополнить запрос
Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008 Откуда: Москва
Помог: 0 раз(а)
Подскажите, пожалуйста! Сама я оч долго буду пробовать и вряд ли смогу сделать. Непосредственно с php малое время работаю, а тут такие умнички сидят, всегда поддержат дельным советом
есть база с марками сталей- набор таблиц с разными свойствами.Есть вот такой скрипт для выборки всех нужных данных из таблицы с каким-либо свойством для определенной марки сталей и отрисовки html-таблицы
бывают случаи, когда для какой-то стали один из столбцов таблицы бд не содержит в себе никаких занчений. Тогда скрипт отрисовывает шапку с названием столбца и соответсвенно пустые ячейки.
Можно ли как-то дополнить этот скрипт таким условием-"если для такой-то марки стали такое-то значение отсутсвует,то для него не отрисовывать столбец"?
Заранее спасибо
Champion
Отправлено: 26 Апреля, 2009 - 17:35:57
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Можно. Способов сразу куча в голову пришли. Только скажи сначала, мы можем по первой строке выборки судить о том какой столбец пустой или это не 100% ? (Добавление)
Ну "куча" - это я преувеличил. Нормальных только 2. Когда на вопрос ответишь, напишу из них подходящий. (Добавление)
В общем, если по первой строке можно судить, о том, какой столбец будет целиком пустым, то делаешь fetch одной только первой строки. После этого шапку строишь так же, как делала, но с условием, что в первой строке в этом столбце не пусто. Потом выводишь данные первой строки в таблицу, а потом всех отсальных также, если не пусто. (Добавление)
Еще приходит в голову такая штука. Всю эту таблицу не построчно выводишь в браузер, а собираешь в строку. Потом str_replace('<td></td>', '', $tablitsa) (Добавление)
Есть еще один способ. Напишу, если 2 первых не подойдут.
Кстати, я бы такие вещи не так организовывал. Таблицы: марки(марка, id_свойства, значение_свойства), свойства(id, назание). Если и "значение свойства" часто повторяется, то и это в отдельную таблицу.
__Lina__
Отправлено: 26 Апреля, 2009 - 18:31:23
Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008 Откуда: Москва
Помог: 0 раз(а)
А у меня так и организованы данные. Есть таблица марок сталей со столбцами id и marka. И есть таблицы со свойствами. Давай для наглядности прям по принтскрину экрана опишу ситуацию.
Для стали вСт6пс просмотрим таблицу механических свойств. Первые пять столбцов имеют какие-то значения, а последующие 7 пустые. Вот как сделать так, чтоб эти последние 7 столбцов вообще не отрисовывались в данном случе. Прикреплено изображение (Нажмите для увеличения)
Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008 Откуда: Москва
Помог: 0 раз(а)
но бывают случаи, когда в первой строке какой-то столбец пустой, а в последующих -нет.(см. картинку) Там в столбце d4 данные появляются только в третьей строчке. Прикреплено изображение (Нажмите для увеличения)
Champion
Отправлено: 26 Апреля, 2009 - 19:41:47
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
__Lina__ пишет:
А у меня так и организованы данные. Есть таблица марок сталей со столбцами id и marka. И есть таблицы со свойствами.
А можно структуру этих таблиц? И tab в запросе - это что?
__Lina__
Отправлено: 26 Апреля, 2009 - 19:54:43
Новичок
Покинул форум
Сообщений всего: 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; И т.д.
Champion
Отправлено: 26 Апреля, 2009 - 20:07:36
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Неудобно спроектирована БД. Это отличается от того, что я говорил. Очень. SQLем тут, как мне теперь представляется, не открутишься. Т.е. какие столбцы пустые - мы все-таки узнаем только после того, как просматриваем целиком выборку? Так получается?
__Lina__
Отправлено: 26 Апреля, 2009 - 20:11:49
Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008 Откуда: Москва
Помог: 0 раз(а)
Я просто до этого только учебную базу в access , а с php дела вообще не имела, но диплом писать надо, поэтому что смогла наваяла.
А про пустые столбцы - выходит, что так. Весь массив надо просмотреть сначала и оценить в нем каждую переменную. Вот я и задалась вопросом можно ли это реализовать)
Покинул форум
Сообщений всего: 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. Бывает же такое)))
__Lina__
Отправлено: 26 Апреля, 2009 - 21:42:13
Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008 Откуда: Москва
Помог: 0 раз(а)
Ну первый блин комом)) уже поздно переделывать.
Суть твоего предложения поняла, но как-то пока затрудняюсь все это грамотно реализовать.... не поможешь?))
З.Ы. действительно с ip адресами необычное совпадение)
Champion
Отправлено: 27 Апреля, 2009 - 08:49:24
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Я даже знаю, к какому ты провайдеру подключена)) К тому же, которому я).
__Lina__ пишет:
Суть твоего предложения поняла, но как-то пока затрудняюсь все это грамотно реализовать.... не поможешь?))
Ну мне лень всё целиком. Ты скажи, какой пункт не получается, я его тебе поподробнее помогу.
А лучше, если ты попробуешь целиком сделать, а я тогда уже конкретные ошибки подправлю, если они будут
valenok
Отправлено: 27 Апреля, 2009 - 09:05:14
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Я вижу как вариант сначала другим запросом найти максимальный размер данных
в ячейках столбца.
--
Соседи =)
Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008 Откуда: Россия
Помог: 1 раз(а)
Если я правильно понял, то if(empty($var)).
__Lina__
Отправлено: 27 Апреля, 2009 - 13:07:48
Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Дек. 2008 Откуда: Москва
Помог: 0 раз(а)
ну это понятно, что empty, я никак сообразить не могу как бы это так написать, чтоб эта переменная по всему столбцу проверялась, и если столбец полностью пустой получается, то не рисовать его
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.