[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Простой тест на PHP
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
maruo
Вот что получилось
Про это вы твердили?

user posted imageuser posted image
Valick
Цитата (maruo @ 15.11.2015 - 23:31)
А вот как в phpmyadmin это сделать будет идентично?

Командная строка для администраторов, phpmyadmin для программистов.
Цитата (maruo @ 15.11.2015 - 23:31)
Надо будет question_id соединить с id_qiestion с первой таблицы?
что мне это даст?

Это даст то, что таблицы будут связаны, без этого невозможно работать с данными на уровне СУРБД. Правильность ответа на вопрос можно будет проверить всего одним SQL запросом к базе данных. И более того, правильность любого количества ответов можно проверить всего одним (этим же) SQL запросом. Вы просто пока не понимаете, что по части обработки данных РНР (скриптовый, но по сути императивный язык) и рядом не стоит с MySQL (декларативный язык).

_____________
Стимулятор ~yoomoney - 41001303250491
maruo
Цитата (Valick @ 16.11.2015 - 08:06)
Цитата (maruo @ 15.11.2015 - 23:31)
А вот как в phpmyadmin это сделать будет идентично?

Командная строка для администраторов, phpmyadmin для программистов.
Цитата (maruo @ 15.11.2015 - 23:31)
Надо будет question_id соединить с id_qiestion с первой таблицы?
что мне это даст?

Это даст то, что таблицы будут связаны, без этого невозможно работать с данными на уровне СУРБД. Правильность ответа на вопрос можно будет проверить всего одним SQL запросом к базе данных. И более того, правильность любого количества ответов можно проверить всего одним (этим же) SQL запросом. Вы просто пока не понимаете, что по части обработки данных РНР (скриптовый, но по сути императивный язык) и рядом не стоит с MySQL (декларативный язык).

Ну я так понял командную строку все равно придется изучать.
Просто это очень нудный процесс, Естественно интерфейс лучше)
Valick
Цитата (maruo @ 16.11.2015 - 10:01)
Ну я так понял командную строку все равно придется изучать.
maruo
Ну вот снова недопонимания.

user posted image

Я вроде бы связал их или нет? я не пойму.

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

Вопрос ? Ограничение внешнего ключа (INNODB)? что это
И связались ли они?

При заполнении столбцов в поле q_id был выпадающий список из первой таблицы в полем q_id.

Да и потом решил я вывести все данные из таблицы ответов где q_id который якобы связал по 1 идентификатору.
Я то думал что мне в массив попадут все данные которые под q_id 1 , но оказывается только первая строка.

тут нужен цикл? что бы вывести все?
Или же тут в запросе проблема?

Сколько щас не копался в рунете не нашел ничего о том как вывести по внешнему ключу)
Или я плохо ищу
Valick
Для начала можно отказаться от INNODB в пользу MyISAM где поняте внешнего ключа условное и БД ничего не делает за вас.
Цитата (maruo @ 16.11.2015 - 11:34)
Да и потом решил я вывести все данные из таблицы ответов где q_id который якобы связал по 1 идентификатору

подкрепляйте вопрос запросом, лучше один раз увидеть запрос, чем сто раз его описывать словами smile.gif
По поводу цикла, при работе с БД возмите за правило, что циклов нет в природе. Как только у вас появляется желание сделать ту или иную выборку с помощь. цикла, у вас как у собаки павлова должна загораться лампочка в голове, и вы должны вспомнить мои слова и понять что вы на ложном пути.
Цитата (maruo @ 16.11.2015 - 11:34)
Или я плохо ищу

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

_____________
Стимулятор ~yoomoney - 41001303250491
maruo
Цитата (Valick @ 16.11.2015 - 14:28)
Для начала можно отказаться от INNODB в пользу MyISAM где поняте внешнего ключа условное и БД ничего не делает за вас.
Цитата (maruo @ 16.11.2015 - 11:34)
Да и потом решил я вывести все данные из таблицы ответов где q_id который якобы связал по 1 идентификатору

подкрепляйте вопрос запросом, лучше один раз увидеть запрос, чем сто раз его описывать словами :)
По поводу цикла, при работе с БД возмите за правило, что циклов нет в природе. Как только у вас появляется желание сделать ту или иную выборку с помощь. цикла, у вас как у собаки павлова должна загораться лампочка в голове, и вы должны вспомнить мои слова и понять что вы на ложном пути.
Цитата (maruo @ 16.11.2015 - 11:34)
Или я плохо ищу

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

Допустим. ищу не могу найти информацию по внешнему ключу.
Везде описываю где применяют их как создать связь.А о том как вывести из таблицы ни слова ни строки кода.

Вот и проблема вся, не получается вывести выводится только 1 строка .

$result = mysql_query("SELECT * FROM question WHERE q_id='1'",$db) or die(mysql_error());
$myrow = mysql_fetch_array($result);
$result_ans = mysql_query("SELECT * FROM answer WHERE q_id='1'",$db) or die(mysql_error());
$myrow_ans = mysql_fetch_array($result_ans);


q_id и есть внешний ключ первой таблицы, скрины 2х таблиц есть несколькими постами выше.

Если читать запрос как учили, то получается
выбери все поля из таблицы answer Где q_id равна единице.
но На деле не получается так)
Тут либо я не создал между ними связь, либо запрос неверный) одно из двух)
Valick
Цитата (maruo @ 16.11.2015 - 13:55)
Вот и проблема вся, не получается вывести выводится только 1 строка

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

_____________
Стимулятор ~yoomoney - 41001303250491
maruo
Цитата (Valick @ 16.11.2015 - 16:34)
Цитата (maruo @ 16.11.2015 - 13:55)
Вот и проблема вся, не получается вывести выводится только 1 строка

вы получаете только первую строку из результирующего набора
mysql_fetch_array() должен быть в цикле

По поводу цикла, при работе с БД возмите за правило, что циклов нет в природе. Как только у вас появляется желание сделать ту или иную выборку с помощь. цикла, у вас как у собаки павлова должна загораться лампочка в голове, и вы должны вспомнить мои слова и понять что вы на ложном пути.

вот поэтому я и спросил у вас значит тут место имеет быть цикл?)
Valick
Я думал вы имели ввиду запрос в цикле. Запросов в цикле быть не должно
а для получения результата применяется цикл while()

$result_ans = mysql_query("SELECT * FROM answer WHERE q_id='1'",$db) or die(mysql_error());
if($result_ans){
if(mysql_num_rows($result_ans)>0){
while($myrow_ans = mysql_fetch_array($result_ans){
echo '<pre>';
print_r($myrow_ans);
echo '</pre>';
}
}
}


_____________
Стимулятор ~yoomoney - 41001303250491
maruo
Вот что и хотел узнать)
Спасибо)ЗА помощь) Все же здесь быстрее и точные ответы получаем нежели на киберфоруме)
Да, вы скобку забыли)
while($myrow_ans = mysql_fetch_array($result_ans)){
Razzwan
Цитата (Valick @ 15.11.2015 - 23:37)
одна сущность - одна таблица
в моем сознании правильный ответ и неправильный вариант - это разные сущности. Например, у правильного ответа может быть еще столбец с объяснением, почему этот ответ правильный. Для неправильного варианта такое поле не имеет смысла. Можно и другие отличия выдумать, но это самое очевидное.

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

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
Valick
Цитата (Razzwan @ 16.11.2015 - 17:07)
в моем сознании правильный ответ и неправильный вариант - это разные сущности

ну тут уж я точно не виноват
Цитата (Razzwan @ 16.11.2015 - 17:07)
Например, у правильного ответа может быть еще столбец с объяснением, почему этот ответ правильный.

а у неправильных ответов этот же столбец может объяснять почему этот ответ не правильный
Цитата (Razzwan @ 16.11.2015 - 17:07)
Есть еще одно преимущество: в момент формирования вопросов мы никак не можем узнать, какой ответ правильный - потому как указатель на правильный вариант хранится в отдельной таблице.

а этот перл я оставлю без комментария

_____________
Стимулятор ~yoomoney - 41001303250491
Razzwan
Цитата (maruo @ 16.11.2015 - 14:55)
Допустим. ищу не могу найти информацию по внешнему ключу.
Везде описываю где применяют их как создать связь.А о том как вывести из таблицы ни слова ни строки кода.
Valick уже выше отвечал на этот вопрос, но мне кажется, ответ был не очень ясен.

Внешний ключ, как и все в программировании - это условность. Ясно, что каждый вариант ответа принадлежит какому-то вопросу. Т.е. id вопроса УСЛОВНО является внешним ключом для вариантов ответа. Внешний ключ - это еще один идентификатор. Просто указатель на то, какому вопросу принадлежит данный вариант ответа - ничего более. Другими словами: внешний ключ - это договоренность помечать, какому вопросу принадлежит данный вариант ответа в таблице с ответами. Поэтому какого-то особого синтаксиса при запросах здесь быть не может.

Т.к. в базах данных очень часто существуют такие связи, то в формате INNODB даже придумали встроенный механизм работы с внешними ключами. Механизм этот заключается в том, что можно, например, удалять все варианты ответа, принадлежащие конкретному вопросу, удаляя лишь вопрос. Согласитесь, удобно. Ведь нам ни к чему засорять таблицу вариантами ответов, вопрос для которых удален.

Этот пример использования внешнего ключа НЕ является единственным. Есть и другие. Но он достаточен для понимания сути.

Вот так должна выглядеть связь в типе таблицы INNODB:
user posted image

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
Razzwan
Цитата (Valick @ 16.11.2015 - 18:18)
> Цитата (Razzwan @ 16.11.2015 - 17:07)
> Например, у правильного ответа может быть еще столбец с объяснением, почему этот ответ правильный.

а у неправильных ответов этот же столбец может объяснять почему этот ответ не правильный
Да может. Теоретически. На практике же, такое поле, чаще всего, бессмысленно. Т.к. нам достаточно объяснить почему этот ответ(ы) правильный(ые), это автоматически становится объяснением, почему все другие варианты являются ошибкой.

Цитата (Valick @ 16.11.2015 - 18:18)
> Цитата (Razzwan @ 16.11.2015 - 17:07)
> Есть еще одно преимущество: в момент формирования вопросов мы никак не можем узнать,
> какой ответ правильный - потому как указатель на правильный вариант хранится в отдельной таблице.

а этот перл я оставлю без комментария
Вы оставляете его без комментариев т.к. не можете доказать ложность таких выводов. Равно как и я не могу доказать оправданность такой "защиты". Но это еще не означает, что мой вывод ложен. Если бы я был злоумышленником, который пытается похитить правильные ответы на тесты, мне было бы гораздо удобнее, чтоб указатель правильности находился в той же таблице, где и сам вариант ответа.

Я не знаю, можно ли для разных таблиц указывать разные права доступа, но, создав такую возможность, мой аргумент станет гарантированно оправданным.

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.