Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

php+mysql

14K
15 августа 2006 года
davvah
14 / / 05.06.2006
Вот какое дело.

$db = mysql_pconnect("localhost", "root", "", "base");
mysql_select_db("base");
здесь подключемся к серверу и выделяем базу

$query = "SELECT ... FROM ... where ..... '......'";
определяем запрос

$result = mysql_query($query);
выполняем запрос
все возврашаемые данные присваиваются переменной $result



$kol_zap = mysql_num_rows($result);
считаем количество строк


и после выводим на экран построчно
for ($i = 1; $i <= $kol_zap; $i++)
{
$row = mysql_fetch_array($result);
echo "<tr>";
echo "<td>".$row['...']."</td>";
echo "<td>".$row['...']."</td>";
echo "<td>".$row['...']."</td>";
echo "<td>".$row['...']."</td>";
echo "<td>".$row['....']."</td>";
echo "</tr>";
}

задача в следующем .
Нужно чтобы как только повлялся результат начиная с первого выводился на экран
тоесть первый ресультатк который присваивается переменной $result вывести на экран и так далее.

Как можно сделать.
8
15 августа 2006 года
mfender
3.5K / / 15.06.2005
echo сразу в поток всё отправляет. Т.е., всё происходит именно так, как ты хочешь.
14K
15 августа 2006 года
davvah
14 / / 05.06.2006
да я понимю , но дело не в echo.
Вот смотри все данные (результаты запроса)сначала присваиваются переменной $result и после чего вывожу на экран.
Вопрос в следующем:
Можно сделать так что бы самый первый ресултат (ответ) запроса, который присваивается переменной сразу вывести на экран. И подобно этому и все остальное.
13
15 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
А у тебя разве не так?
Делаешь mysql_fetch_array - вот тебе первая строка результата
второй проход цикла - еще раз mysql_fetch_array - вот тебе и вторая строка результата
В чем проблема-то?
8
15 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=davvah]да я понимю , но дело не в echo.
Вот смотри все данные (результаты запроса)сначала присваиваются переменной $result и после чего вывожу на экран.
Вопрос в следующем:
Можно сделать так что бы самый первый ресултат (ответ) запроса, который присваивается переменной сразу вывести на экран. И подобно этому и все остальное.[/QUOTE]
Любезный, такого не бывает. В случае с MySQL - точно. А что, пара десятков милисекунд большую рояль играют уже? Переходите на Oracle.
15
15 августа 2006 года
shaelf
2.7K / / 04.05.2005
 
Код:
while($print = mysql_fetch_array($result)) {
    echo $print[0] . "\n";
}

Мне кажеться он про это.
8
16 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=shaelf]
 
Код:
while($print = mysql_fetch_array($result)) {
    echo $print[0] . "\n";
}

Мне кажеться он про это.[/QUOTE]
А какая разница? $result всё-равно присутствует...
15
16 августа 2006 года
shaelf
2.7K / / 04.05.2005
Я понял, теперь доехало (медленно, но всё же). Теперь я задам вопрос, а для чего это нужно? Хочешь на памяти экономить? Делай более правильный запрос(используй минимальное колличество полей) и не юзай mysql_fetch_array() это приросту и то больше даст.
14K
17 августа 2006 года
davvah
14 / / 05.06.2006
база огромная 60000000 записей. Запрос длится около 4 мин

А что же использовать ели не fetch_array
8
17 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=davvah]база огромная 60000000 записей. Запрос длится около 4 мин

А что же использовать ели не fetch_array[/QUOTE]
fetch_row или fetch_assoc
Но что-то уж очень не похоже на правду, чтобы в MySQL было указанное количество записей...
Честно говоря, даже самые быстрые MSSQL и Oracle будут тоже очень долго выбирать из такого количества требуемое. И тут не сэкономишь ни на чём.
15
17 августа 2006 года
shaelf
2.7K / / 04.05.2005
Только за то, что эту БД засунули в мускул назвать человека умным не как нельзя. Просто эта БД не предназначена для таких данных. По поводу mysql_fetch_array() и его заменителях, после того как я посмотрел var_dump() от него, я отказался от этой функции (до этого наверное ман невнимательно читал), т.к. эта функция возвращает не один, а два одинаковых массива (один числовой, во втором имена полей в качестве значения). И если ты с нулями не ошибся, то тебе прямая дорога на oracle.com
8
17 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=shaelf]И если ты с нулями не ошибся, то тебе прямая дорога на oracle.com[/QUOTE]
Вот-вот, я тоже четыре раза нули пересчитал... Очень смутно представляю такую таблицу в MySQL...
13
17 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
60 миллионов записей вполне выдержит PostgreSQL. Проверено. Сегодня с утра для такой таблицы делал VACUUM FULL
15
17 августа 2006 года
shaelf
2.7K / / 04.05.2005
2RussianSpy Дело не в том что туда можно их запихнуть, дело в том, как с этим работать будет всё) Вообще рекомендуется (ссылку не просите, искать не хоца, а где читал - не помню) делать в мускул не более ляма записей.
20K
19 августа 2006 года
n0n@m3
8 / / 19.08.2006
Для увелечения скорости почитай мануал по MySQL, и попробуй изменить тип таблицы, попробуй InnoDB (специально для твоего случая), MyISAM , а если подойдет для скрипта, то используй MEMORY, тагда скорость очень выостет НО RAM будет сильно использоваться + при restart все похериться (если я не ошибаюсь)

http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html - тут есть все инфа!

В добавок, ты написал что ты используеш : $query = "SELECT ... FROM ... where ..... '......'";

Вот все переменные которые в WHERE, возми их и проиндексируй, ето поможет очень со скоростью! Но - по правилам баз данных это не верно , зато помогает. + у тебя база вырастит в размере!

и вообше перепиши скрипт вот так вот :

<?php

mysql_pconnect("localhost", "root", "");
mysql_select_db("base");

$Query = "Select var1,var2,var3 FROM ... where ..... '......'";
/**
* Не используй Select *, выбирай именно то что тебе надо!
*/

$Result = mysql_query($Query);

/**
* $kol_zap = mysql_num_rows($result); - ошибка : так не делай - это очень долго. посмотри
* ниже как я считаю!
*/
$Counter = 0;
while($Row = mysql_fetch_assoc($Result))
{
$Counter++;
/**
* Тут подсчитываем кол-во строк
* просто mysql_num_rows очень долго И не нужно, так как ты все равно по всему
* Array проходишся.
*/
echo "<tr>";
echo "<td>".$Row['...']."</td>";
echo "<td>".$Row['...']."</td>";
echo "<td>".$Row['...']."</td>";
echo "<td>".$Row['...']."</td>";
echo "<td>".$Row['...']."</td>";
echo "</tr>";
}

?>



Если сделаеш так, то получиш ускорение раза так в 3...
15
20 августа 2006 года
shaelf
2.7K / / 04.05.2005
Мдя... Боришся за скорость и при большом колличестве строк лепишь столько echo )))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог