X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Проверка таблицы на пустоту
Mishko_hb
Mishko_hb
Topic Starter сообщение 8.9.2010, 13:16; Ответить: Mishko_hb
Сообщение #1


Здравствуйте. В общем у меня идиотский вопрос, но все же, как не искал, нахожу не совсем те ответы. Задача: нужно сделать выборку из таблицы, ну например каталога и если таблица пуста, то вывести сообщение, типа "каталог еще не заполнен". Как посредством php проверить таблицу на пустоту?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 8.9.2010, 13:46; Ответить: Mulder_hb
Сообщение #2


[PHP]$result = mysql_query("SELECT `name` FROM `table` ORDER BY `name`");
for ($name = array(); $row = mysql_fetch_assoc($result); $name[] = $row);
if (!$name) {
echo "Таблица пуста";
}
else {
for ($i = 0; $i < count($name); $i++) {
echo $name[$i]['name']."<br/>";
}
}[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mishko_hb
Mishko_hb
Topic Starter сообщение 8.9.2010, 16:24; Ответить: Mishko_hb
Сообщение #3


Спасибо! И еще вопрос, чтобы не плодить тем..
Совсем заработался, не могу понять в чем проблема.. Есть база с каталогом товаров, 2 таблицы "cats" (с названиями, описаниями и фотками категорий товаров) и "goods" - с самими товарами. Делаю админку. На странице редактирования категорий у админа должна быть возможность переименовать название и описание категории.

Админ нажимает на "редактировать", появляется форма, в полях которой вписаны существующие значения полей таблицы. Что-то меняет, нажимает "ок" и данные в базе обновляются.

Вот обработчик последнего:
[PHP]if(isset($_GET[ok_editcat]))
{

$sql="UPDATE cats SET catname='$_GET[catname]', cat_desc='$_GET[cat_desc]'";
mysql_query($sql);
header("location: index.php");
} [/PHP]

При этом он меняет все названия и описания, что есть в таблице. А нужно, чтобы менял только у одной строки. Как передать id этой редактируемой категории? Помогите...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
LifeUP
LifeUP
сообщение 8.9.2010, 16:48; Ответить: LifeUP
Сообщение #4


Проверка на пустоту:
[PHP]
$res = mysql_query ("SELECT * FROM `table`");

if (mysql_num_rows ($res) == 0)
{
echo 'Пусто';
}
else
{
echo 'Чето есть';
}
[/PHP]

Для подобного редактирования вам нужно назначить ID (уникальный идентификатор) каждой таблице

к примеру
1. таблица

id
name

2. таблица

id
name

при редактировании одной из них вы будете цеплятся за ID.

[PHP]
$sql="UPDATE cats SET catname='$_GET[catname]', cat_desc='$_GET[cat_desc]' WHERE id = '" . $id . "'";
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 8.9.2010, 17:15; Ответить: Mulder_hb
Сообщение #5


(LifeUP @ 8.9.2010, 19:48) *
Проверка на пустоту:

Снова проявлю свое занудство. Никогда не применяйте подобный код на больших базах и высоконагруженных сайтах. Золотое правило гласит: "Никогда не используйте средства стороннего яп для реализации того, что способна сделать сама СУБД". В данном случае запрос:
SELECT COUNT('name`) FROM `table`;

выполнит нужное действие куда быстрее и менее затратно, чем mysql_num_rows(). А в примере автора темы, использование этой пхп-функции еще и лишнее, т.к. автору в случае непустой таблицы нужно будет эту таблицу парсить и окажется, что он дважды вызовет фактически одну и туже по нагруженности и затратам функцию: mysql_num_rows() и mysql_fetch_assoc(). Зачем дважды парсить один и тот же результат? Давайте писать религиозно правильный и красивый пхп-код.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
unnormal
unnormal
сообщение 8.9.2010, 17:33; Ответить: unnormal
Сообщение #6


(Mulder_hb @ 8.9.2010, 20:15) *
SELECT COUNT('name`) FROM `table`;
выполнит нужное действие куда быстрее и менее затратно, чем mysql_num_rows()

SELECT(*) - ещё быстрее будет =)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 8.9.2010, 17:56; Ответить: Mulder_hb
Сообщение #7


(unnormal @ 8.9.2010, 20:33) *
SELECT(*) - ещё быстрее будет =)

Не будет. Выборка всех полей всегда происходит медленнее, чем выборка одного поля.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
LifeUP
LifeUP
сообщение 8.9.2010, 20:56; Ответить: LifeUP
Сообщение #8


(Mulder_hb @ 8.9.2010, 20:15) *
Снова проявлю свое занудство. Никогда не применяйте подобный код на больших базах и высоконагруженных сайтах. Золотое правило гласит: "Никогда не используйте средства стороннего яп для реализации того, что способна сделать сама СУБД". В данном случае запрос:
SELECT COUNT('name`) FROM `table`;

выполнит нужное действие куда быстрее и менее затратно, чем mysql_num_rows(). А в примере автора темы, использование этой пхп-функции еще и лишнее, т.к. автору в случае непустой таблицы нужно будет эту таблицу парсить и окажется, что он дважды вызовет фактически одну и туже по нагруженности и затратам функцию: mysql_num_rows() и mysql_fetch_assoc(). Зачем дважды парсить один и тот же результат? Давайте писать религиозно правильный и красивый пхп-код.


Доказательства?

помоему это лучше будет чем писать ваш for (), даже взять DLE там проверки через мой способ видел, ваш вижу впервые.
накройняк COUNT().
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 8.9.2010, 23:34; Ответить: Mulder_hb
Сообщение #9


(LifeUP @ 8.9.2010, 23:56) *
Доказательства?

Неужели вы думаете, что инструменты базы данных, которые специально созданы для работы со своими данными, проведут вычисления над ними гораздо медленнее, чем сторонние языки программирования?
Была у меня как-то жутко здоровая база, которая крутилась на загруженном под завязку сервере. Нужно мне было делать выборку из одной таблицы с почти миллионом строк, а потом дальше работать с этим набором. Решил я сделать общий запрос (SELECT * ...), а потом mysql_num_rows() и затем mysql_fetch_assoc() и вывод данных пользователю. Каково же было мое удивление, когда пользователь ждал вывод данных почти 2 десятка секунд. Но вот когда я сделал запрос (SELECT COUNT(`id`)) страница вывелась мгновенно.
(LifeUP @ 8.9.2010, 23:56) *
помоему это лучше будет чем писать ваш for ()

for здесь вообще не при делах. Вы не туда смотрите. Это просто парсинг результирующего набора с сохранением результатов предыдушего прохода. Обыкновенный бестельный цикл. Вы можете применять цикл с телом
[PHP]while ($data = mysql_fetch_assoc($result)) {
echo $data;
}[/PHP]
Но в этом случае вы теряете предыдущие данные. Если предыдущие данные вам не нужны, то можно использовать while, если нужны - нужно использовать for.
(LifeUP @ 8.9.2010, 23:56) *
даже взять DLE

Дле не показатель. В любом проекте даже самом крутом, встречается быдло код. В дле очень дорожат совместимостью своего кода с предыдущими версиями как своего движка, так и пхп. Там до сих пор 80% кода ядра основано на стандартах третьей версии пхп.
(LifeUP @ 8.9.2010, 23:56) *
накройняк COUNT().

Задача ведь не стоит узнать кол-во записей. Задача стоит узнать пуста ли таблица и в зависимости от результатов скрипт начинает ветвление. Так зачем делать два запроса (SELECT COUNT(*) и SELECT *) или дважды парсить результирующий набор (сначала mysql_num_rows(), а потом в довесок mysql_fetch_*())? Можно ведь все сделать одним запросом и одним парсингом. Как думаете, будет ли это быстрее?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mishko_hb
Mishko_hb
Topic Starter сообщение 9.9.2010, 10:43; Ответить: Mishko_hb
Сообщение #10


LifeUP, да, разумеется в каждой таблице есть id. Только вот у меня не получается связать id категории, напротив которой пользователь нажимает "редактировать" и id каткгории в которую вносятся изменения (у меня он все изменяет). Нужно как раз правильное условие WHERE. И я не разобрался в том, что у вас написано после WHERE..
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Проверка позиций сайтов в поисковых системах с помощью Positon.ru
Мониторинг продвижения сайтов
182 Positon 178940 23.2.2024, 9:53
автор: Positon
Открытая тема (нет новых ответов) Проверка качества прогона по трастовым сайтам, профилям, каталогам
0 bestweb20_mw 1383 21.12.2017, 18:36
автор: bestweb20_mw
Открытая тема (нет новых ответов) Отсортировать данные таблицы
по дням/часам и тп
3 tube 2309 1.7.2017, 0:38
автор: Shandanakar
Открытая тема (нет новых ответов) Фейк вконтакте - лучшая фотомодель (проверка на валид, админка)
0 Quant 2204 26.5.2017, 14:33
автор: Quant
Горячая тема (нет новых ответов) Чистим сайты от вирусов, рекомендации, проверка сервера на уязвимость!
80 Rxp 56449 16.2.2017, 15:05
автор: Andro11


 



RSS Текстовая версия Сейчас: 29.3.2024, 0:11
Дизайн