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 :: Колонку из таблицы MySQL сохранить в массив.

 PHP.SU

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


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

> Без описания
Alt.F4
Отправлено: 14 Июля, 2011 - 22:32:23
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2011  


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




Добрый день.
Подскажите пожалуйста, каким образом можно колонку из таблицы MySQL сохранить в массив.
CODE (htmlphp):
скопировать код в буфер обмена
  1. $result = mysql_query ("SELECT date FROM ***"); //запрашиваем массив с датами
  2. $date_array = mysql_fetch_array ($result);//сохраняю
В результате в $date_array будет только одна дата.
Пытаюсь всунуть цикл while и array_push но на нее выдает ошибки.
Что можно придумать?
Спасибо.

(Отредактировано автором: 14 Июля, 2011 - 22:34:24)

 
 Top
OrmaJever Модератор
Отправлено: 14 Июля, 2011 - 22:36:31
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




PHP:
скопировать код в буфер обмена
  1. $result = mysql_query ("SELECT date FROM ***"); //запрашиваем массив с датами
  2. $arr = array();
  3. while($date_array = mysql_fetch_array ($result)) {
  4.       $arr[] = $date_array['date'];
  5. }
  6. print_r($arr);
  7.  


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
evgenijj
Отправлено: 14 Июля, 2011 - 23:19:45
Post Id



Участник


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


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




Я копирую ответ с другого форума, но думаю, это даст ответ на твои вопросы:

Тебе надо обязательно почитать описание функций PHP для работы с MySQL:
Функции PHP для работы с MySQL
Функции СУБД MySQL

Давай рассмотрим на примере. Итак, есть таблица:
CODE (text):
скопировать код в буфер обмена
  1. id | name | email         | password
  2. -------------------------------------
  3. 1  | Миша | misha@mail.ru | 123
  4. 3  | Саша | sasha@mail.ru | 456
  5. 5  | Маша | masha@mail.ru | 789

Делаем запрос на выборку из таблицы


SQL:
скопировать код в буфер обмена
SELECT name, email, password FROM users WHERE id IN ( 1, 3 ) ORDER BY id;

Этот запрос вернет нам две записи
CODE (text):
скопировать код в буфер обмена
  1. Миша | misha@mail.ru | 123
  2. Саша | sasha@mail.ru | 456

отсортированные по возрастанию id (т.е. сначала запись "Миша", потом "Саша"). Обрабатываем этот результат
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $res = mysql_query("SELECT name, email, password FROM users WHERE id IN ( 1, 3 ) ORDER BY id");
  3. echo 'Рузультат запроса содержит '.mysql_num_rows($res).' строк<br/>';
  4. echo "<table border='1'>";
  5. echo "<tr><th>Имя</th><th>E-mail</th><th>Пароль</th>";
  6. while ($user = mysql_fetch_array($res))  
  7. {
  8.   echo "<tr><th>".$user["name"]."</th><th>".$user["email"]."</th><th>".$user["password"]."</th></tr>";
  9. }
  10. echo "</table>";
  11. ?>

Каждый вызов функции mysql_fetch_array() возвращает следующую строку результата в виде массива. Если записи закончились, функция возвращает FALSE и мы выходим из цикла. Можно результат обработать и так:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $res=mysql_query("SELECT name, email, password FROM users WHERE id IN ( 1, 3 ) ORDER BY id");
  3. echo 'Рузультат запроса содержит '.mysql_num_rows($res).' строк<br/>';
  4. echo "<table border='1'>";
  5. echo "<tr><th>Имя</th><th>E-mail</th><th>Пароль</th>";
  6. while ($user = mysql_fetch_array($res))  
  7. {
  8.   echo "<tr><th>".$user[0]."</th><th>".$user[1]."</th><th>".$user[2]."</th></tr>";
  9. }
  10. echo "</table>";
  11. ?>

Или так
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $res=mysql_query("SELECT name, email, password FROM users WHERE id IN ( 1, 3 ) ORDER BY id");
  3. echo 'Рузультат запроса содержит '.mysql_num_rows($res).' строк<br/>';
  4. echo "<table border='1'>";
  5. echo "<tr><th>Имя</th><th>E-mail</th><th>Пароль</th>";
  6. while ($user = mysql_fetch_row($res))  
  7. {
  8.   echo "<tr><th>".$user[0]."</th><th>".$user[1]."</th><th>".$user[2]."</th></tr>";
  9. }
  10. echo "</table>";
  11. ?>

Или так
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $res = mysql_query("SELECT name, email, password FROM users WHERE id IN ( 1, 3 ) ORDER BY id");
  3. echo 'Рузультат запроса содержит '.mysql_num_rows($res).' строк<br/>';
  4. echo "<table border='1'>";
  5. echo "<tr><th>Имя</th><th>E-mail</th><th>Пароль</th>";
  6. while ($user = mysql_fetch_assoc($res))  
  7. {
  8.   echo "<tr><th>".$user["name"]."</th><th>".$user["email"]."</th><th>".$user["password"]."</th></tr>";
  9. }
  10. echo "</table>";
  11. ?>

При желании можем получить доступ к отдельным полям результата запроса
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. echo mysql_result( $res, 0, 0 ); // выводит Миша
  3. echo mysql_result( $res, 0, 2 ); // выводит 123
  4. echo mysql_result( $res, 1, 1 ); // выводит sasha@mail.ru
  5. ?>


Ну а функция mysql_num_rows() возвращает количество строк результата запроса, т.е. в нашем случае 2.

P.S. Функция SQL COUNT() возвращает количество записей в таблице:


Обработав этот результат с помощью функции mysql_result() получим количество записей в таблице users

Цитата:
Подскажите пожалуйста, каким образом можно колонку из таблицы MySQL сохранить в массив

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $query = "SELECT mydate FROM mytable WHERE 1 LIMIT 10";
  3. $res = mysql_query( $query );
  4. while( $dt = mysql_fetch_array( $res ) ) {
  5.   $date[] = $dt['mydate'];
  6. }
  7. ?>

Здесь у нас одномерный массив из 10 элементов, каждый из которых содержит дату
CODE (htmlphp):
скопировать код в буфер обмена
  1. $date[0] = '...';
  2. $date[1] = '...';
  3. .....
  4. $date[9] = '...';

(Отредактировано автором: 14 Июля, 2011 - 23:28:59)

 
 Top
Alt.F4
Отправлено: 15 Июля, 2011 - 07:30:10
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2011  


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




Цитата:
while($date_array = mysql_fetch_array ($result))
{
$arr[] = $date_array['date'];
}
Спасибо большое!!!
Вот это работает.

Правда возник еще один вопрос. В полученном массиве часто повторяются даты. Мне по сути дела без разницы в дальнейшем, но как сделать скрипт более производительным:
1. Проверять на повторяемость перед записью в массив?
2. Или писать все?
В дальнейшем буду обрабатывать массив с помощью in_array().
Спасибо.

(Отредактировано автором: 15 Июля, 2011 - 07:30:28)

 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Июля, 2011 - 08:09:14
Post Id



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


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


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




Alt.F4 пишет:
Проверять на повторяемость

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT date FROM *** GROUP BY date

(Отредактировано автором: 15 Июля, 2011 - 08:09:38)

 
 Top
evgenijj
Отправлено: 15 Июля, 2011 - 08:59:54
Post Id



Участник


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


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




Цитата:
Проверять на повторяемость перед записью в массив?

Читать учебник по SQL. Ну или хотя бы в Yandex/Google посмотреть по ключевому слову DISTINCT

(Отредактировано автором: 15 Июля, 2011 - 09:05:36)

 
 Top
Kubert
Отправлено: 15 Июля, 2011 - 11:12:13
Post Id



Частый гость


Покинул форум
Сообщений всего: 186
Дата рег-ции: Февр. 2010  


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




Alt.F4 пишет:
Цитата:
while($date_array = mysql_fetch_array ($result))
{
$arr[] = $date_array['date'];
}
Спасибо большое!!!
Вот это работает.

Правда возник еще один вопрос. В полученном массиве часто повторяются даты. Мне по сути дела без разницы в дальнейшем, но как сделать скрипт более производительным:
1. Проверять на повторяемость перед записью в массив?
2. Или писать все?
В дальнейшем буду обрабатывать массив с помощью in_array().
Спасибо.


$arr = array-unique($arr);
 
 Top
Alt.F4
Отправлено: 15 Июля, 2011 - 18:21:17
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2011  


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




Цитата:
$arr = array-unique($arr);
Этот вариант менее производительный чем:
Цитата:
посмотреть по ключевому слову DISTINCT
evgenijj, спасибо большое!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB