Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Из запроса к базе получить одно поле
 
 автор: OLi   (11.06.2010 в 13:36)   письмо автору
 
 

Есть один запрос к базе...надо вывести отдельно одно поле, а затем всё из таблицы...Проблема в том что конфликтует mysql_fetch_array при повторном использовании: первый раз для вывода одного поля
$resultc=mysql_query("sELECT * FROM pages where id=1");
    if(mysql_num_rows($resultc)>0){
$myrow=mysql_fetch_array($resultc);
}
<?php echo $myrow['title']; ?>
Вывод всего:
while(($blocks=mysql_fetch_array($resultc))>0) { Вывод всей таблицы}

  Ответить  
 
 автор: Valick   (11.06.2010 в 13:49)   письмо автору
 
   для: OLi   (11.06.2010 в 13:36)
 

поиск уматная штука

  Ответить  
 
 автор: OLi   (11.06.2010 в 14:37)   письмо автору
 
   для: Valick   (11.06.2010 в 13:49)
 

Спасибо!

  Ответить  
 
 автор: Axxil   (11.06.2010 в 13:50)   письмо автору
 
   для: OLi   (11.06.2010 в 13:36)
 

Вот это
while(($blocks=mysql_fetch_array($resultc))>0) { Вывод всей таблицы}


После этого запроса

$resultc=mysql_query("sELECT * FROM pages where id=1"); 


Никак всю таблицу не выведет. И дело не в конфликтах.

Перед выводом вывести всей таблицы нужно менять запрос

$resultc=mysql_query("sELECT * FROM pages"); 


PS И где вы таким чудесным циклам научились?

while(($blocks=mysql_fetch_array($resultc))>0) 

  Ответить  
 
 автор: Valick   (11.06.2010 в 14:02)   письмо автору
 
   для: Axxil   (11.06.2010 в 13:50)
 

Никак всю таблицу не выведет. И дело не в конфликтах
нет, ты не ёлка, ты папоротник)))
для такого серьезного заявления нужно знать что такое id(оно может содержаться в каждой строке и быть равно единице)
да и в любом случае запрос селект всегда возвращает таблицу, пусть даже состоящую из одной строки, но таблицу(!)

  Ответить  
 
 автор: neadekvat   (11.06.2010 в 15:38)   письмо автору
 
   для: Valick   (11.06.2010 в 14:02)
 

А вы логику включите, если во всей таблице id равно 1, то нахрена это поле нужно? Другое дело, что таки надо было уточнить некоторые нюансы.

А вообще, знаете, select возвращает строки из таблицы в виде отдельных данных, но никак не таблицы.

  Ответить  
 
 автор: Valick   (11.06.2010 в 22:33)   письмо автору
 
   для: neadekvat   (11.06.2010 в 15:38)
 

то нахрена это поле нужно?
понятия не имею на хрена, но не исключаю такой возможности...
идентификатором строки может являться поле например с именем balalaika, а id может являться идентификатором строки другой таблицы и при удачном стечении обстоятельств встретиться во всех строках таблицы (может время id=2 еще не наступило)
___
моя логика далека от чьей-то таблицы ;)

  Ответить  
 
 автор: neadekvat   (11.06.2010 в 22:52)   письмо автору
 
   для: Valick   (11.06.2010 в 22:33)
 

Но если время id=2 теоретически наступить может, то уже нельзя сказать, что с помощью "select..where id=2" мы сможем вытащить все строки из таблицы.

  Ответить  
 
 автор: Valick   (11.06.2010 в 23:16)   письмо автору
 
   для: neadekvat   (11.06.2010 в 22:52)
 

слова { Вывод всей таблицы} относятся к результирующей таблице которая образуется в результате запроса SELECT, которую Вы кстати с успехом можете использовать во FROM
SELECT * FROM (SELECT * FROM tbl)

  Ответить  
 
 автор: neadekvat   (11.06.2010 в 23:28)   письмо автору
 
   для: Valick   (11.06.2010 в 23:16)
 

Вы мне сейчас мозг пытаетесь вынести?
Я ответил вам, а не автору, и не на его вопрос (т.к. на него вы уже ответили), а на ваши слова о том, что select возвращает таблицу. Я сказал, что select никаких таблиц не возвращает. Но, да, конечно, таблицу из данных, которые вернет select построить можно.

  Ответить  
 
 автор: Valick   (11.06.2010 в 23:40)   письмо автору
 
   для: neadekvat   (11.06.2010 в 23:28)
 

селект возвращает таблицу и ничего кроме таблицы
количество полей одной строки результата запроса не может отличаться от количества полей другой строки этого же запроса - это та-бли-ца
____
вынести может и не вынесу, но надгрызу основательно :)

  Ответить  
 
 автор: neadekvat   (11.06.2010 в 23:44)   письмо автору
 
   для: Valick   (11.06.2010 в 23:40)
 

SELECT применяется для извлечения строк, выбранных из одной или нескольких таблиц.

(c) http://www.mysql.ru/docs/man/SELECT.html

P.S.
Таб-ли-ца, а не та-бли-ца.

  Ответить  
 
 автор: Valick   (11.06.2010 в 23:55)   письмо автору
 
   для: neadekvat   (11.06.2010 в 23:44)
 

реляционная
:)

  Ответить  
 
 автор: neadekvat   (12.06.2010 в 00:04)   письмо автору
 
   для: Valick   (11.06.2010 в 23:55)
 

Кхм, пардон..Ичо?
Я знаю, что из себя представляет реляционная база данных.

  Ответить  
 
 автор: Valick   (12.06.2010 в 00:06)   письмо автору
 
   для: neadekvat   (12.06.2010 в 00:04)
 

выходит что не знаете

  Ответить  
 
 автор: neadekvat   (12.06.2010 в 00:14)   письмо автору
 
   для: Valick   (12.06.2010 в 00:06)
 

Я вам привел цитату и ссылку на страницу из документации, повествующую о том, что возвращает select.
Вы мне дали ссылку на страницу, рассказывающую о СУБД.
Как ваша ссылка относится к теме?
Я надеюсь, следующий ваш пост будет наполнен конкретикой и выводами, к тому же, по теме :)

  Ответить  
 
 автор: Valick   (12.06.2010 в 00:22)   письмо автору
 
   для: neadekvat   (12.06.2010 в 00:14)
 

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

  Ответить  
 
 автор: neadekvat   (12.06.2010 в 00:26)   письмо автору
 
   для: Valick   (12.06.2010 в 00:22)
 

Это, пожалуй, единственное подобное изречение во всем гугле.

Пожалуйте-с:
SELECT is used to retrieve rows selected from one or more tables

(с) http://dev.mysql.com/doc/refman/5.0/en/select.html

  Ответить  
 
 автор: Valick   (12.06.2010 в 00:44)   письмо автору
 
   для: neadekvat   (12.06.2010 в 00:26)
 

угу, абсолютно согласен :)
Селект предназначен для выборки строк, а результатом работы селекта - будет таблица :)
даже если она состоит из одной строки(более того даже если она состоит из одного столбца) - в сущности это таблица

  Ответить  
 
 автор: Trianon   (12.06.2010 в 04:04)   письмо автору
 
   для: Valick   (11.06.2010 в 23:40)
 

вообще-то neadekvat прав - SELECT никакую таблицу не возвращает.
Он возвращает табличный результат. Вернее, даже набор строк табличного результата.
Таблица, всё ж - нечто большее.

  Ответить  
 
 автор: Valick   (12.06.2010 в 08:07)   письмо автору
 
   для: Trianon   (12.06.2010 в 04:04)
 

единственное отличие результирующей таблицы от исходной - это то что она не имеет названия (если не использовать AS и даже в этом случее сильно сомневаюсь что у нее нет "порядкового номера на рукаве")
хотелось бы услышать по нечто большее, что мешает набору строк табличного результата быть полноценной таблицей.
___
могли бы рассказать когда в INSERT SELECT таблица перестает быть таблицей и снова обретает статус таблицы?
___
могли бы прокомментировать вот это:
   1. CREATE VIEW temp AS SELECT CONCAT('c','_',id ) AS ID,  
   2.  company_name AS name,  'customer' AS parent  
   3. FROM customers  
   4. UNION SELECT CONCAT(  'p',  '_', id ) AS ID, name,  
   5. CONCAT(  'c',  '_', parent ) FROM customers_person  

  Ответить  
 
 автор: Valick   (15.06.2010 в 11:46)   письмо автору
 
   для: Trianon   (12.06.2010 в 04:04)
 

кстати чем отвечает консоль на запрос SELECT ?
набором строк табличного результата или все таки рисует таблицу? :)

[поправлено модератором: консольный клиент mysql и СУБД MySQL разные программы - не следует их смешивать в контексте обсуждения обработки SQL-запросов]

  Ответить  
 
 автор: Trianon   (15.06.2010 в 13:55)   письмо автору
 
   для: Valick   (15.06.2010 в 11:46)
 

на запрос отвечает сервер.
клиент этот табличный результат представляет, как может.
Консольный клиент, PMA - визуализируют.
программные интерфейсы (php-шный и т.п.) - формирует буфер массивов.
и т.д.
Но
даже человечьи клиенты не создают таблицу в терминах сервера.

Хотя возможность такая есть, хоть и обглоданная. CREATE TABLE nn SELECT * FROM ...

  Ответить  
 
 автор: Valick   (15.06.2010 в 15:25)   письмо автору
 
   для: Trianon   (15.06.2010 в 13:55)
 

даже человечьи клиенты не создают таблицу в терминах сервера.
позвольте таки полюбопытствовать о терминах сервера
сильно сомневаюсь что MySQL берет линейку, мочит карандаш о кончик языка и начинает вычерчивать таблицу на винчестере (CREATE TABLE), а потом пхает туды шо попало.
т.о. то что лежит на винчестере в терминах сервера - это таблица,
а то что возвращает SELECT - это не таблица.
Вот я и пытаюсь понять разницу между ними.
- и там и там есть строки
- и там и там есть поля
- и там и там количество полей одинаково в каждой строке
- и там и там значения, находящиеся в одном столбце таблицы имеют один тип данных
чего именно я не могу понять?

  Ответить  
 
 автор: Trianon   (15.06.2010 в 15:46)   письмо автору
 
   для: Valick   (15.06.2010 в 15:25)
 

>даже человечьи клиенты не создают таблицу в терминах сервера.
>позвольте таки полюбопытствовать о терминах сервера
>сильно сомневаюсь что MySQL берет линейку, мочит карандаш о кончик языка и начинает вычерчивать таблицу на винчестере (CREATE TABLE), а потом пхает туды шо попало.
>т.о. то что лежит на винчестере в терминах сервера - это таблица,

Нет. То, что лежит на винчестере - это хранилище этой (и возможно других) таблицы.

>а то что возвращает SELECT - это не таблица.
>Вот я и пытаюсь понять разницу между ними.

Очень просто.
У таблицы есть структура. То, что выдает SHOW CREATE TABLE.
И интерфейс чтения (запрос SELECT) и изменения (запросы DML).
Ну и определения (запросы DDL) докучи.

  Ответить  
 
 автор: Valick   (15.06.2010 в 16:02)   письмо автору
 
   для: Trianon   (15.06.2010 в 15:46)
 

То, что выдает SHOW CREATE TABLE
отвечу Вашими же словами
на запрос отвечает сервер.
клиент этот табличный результат представляет, как может.
Консольный клиент, PMA - визуализируют


У таблицы есть структура.
неоспоримое замечание...
теперь давайте разберемся куда же девается структура в ответе на запрос SELECT

___
может я чего-то не понимаю, в силу своей врожденной тупости, но...
при реляционной модели БД на входе мы имеем одну или более таблиц, и надо полагать на выходе мы имеем таблицу... вот меня и волнует...
что еще на выходе мы можем получить кроме таблицы?

  Ответить  
 
 автор: Trianon   (15.06.2010 в 16:47)   письмо автору
 
   для: Valick   (15.06.2010 в 16:02)
 

идеальная реляционная модель таки слегка отличается от SQL-языка.

На выходе идеальной реляционной модели (РМ) мы конечно же получим РМ-таблицу .
При чем мгновенно, одним глотком так сказать, а не построчно, буфферизировано и т.д.
Но боюсь, что там уже не будет никаких ORDER BY, и тем паче LIMIT... :)

  Ответить  
 
 автор: Axxil   (11.06.2010 в 16:30)   письмо автору
 
   для: Valick   (11.06.2010 в 14:02)
 

Есть такое дело, но у меня на автомате id ассоциируется с инкрементом, поэтому и получилось такое "серьёзное заявление".

Но вообще да, в общем случае может получиться несколько строк и даже (в совсем запущенном случае) вся таблица.

  Ответить  
 
 автор: Valick   (11.06.2010 в 22:28)   письмо автору
 
   для: Axxil   (11.06.2010 в 16:30)
 

Я со своим автоматом тоже врюхивался :)
И благо на форуме всегда поправят, сегодня я - завтра меня)
____
круговая порука...

  Ответить  
 
 автор: neadekvat   (11.06.2010 в 22:53)   письмо автору
 
   для: Valick   (11.06.2010 в 22:28)
 

> И благо на форуме всегда поправят, сегодня я - завтра меня
Не даром говорят - одна голова хорошо, а две лучше. Хотя форум имеет еще куда более высокую ценность :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования