#php #mysql #sql #phpmyadmin
#php #mysql #sql #phpmyadmin
Вопрос:
Я не очень много знаю о MYSQL, и у меня возникли проблемы с проектированием структуры моей базы данных. Я не понимаю всей информации, предоставляемой мне онлайн, слишком много жаргона, ожидающего, что я пойму другие термины и идеи, и не хочу проходить курс для этой единственной работы, поэтому я надеюсь, что это достаточно просто.
Я хочу создать список файлов на странице. Там должно быть 4 поля:
- Name — заголовок файла
- Единицы — к какой из выбранных единиц применяется этот файл (например: 27 или X1 или 10), я хочу иметь возможность добавлять несколько единиц в некоторые файлы.
- Typeof — Какой это тип файла (пример: swf, pdf, url).
- Проект — Для какого проекта был создан файл (например: сексуальное здоровье, информационная грамотность)
- Результаты — Здесь должна быть возможность хранить числа 1-5, поэтому в одном файле могут быть (1,3 и 5)
Проблема в том, как я хочу использовать эти данные, я хочу иметь возможность сначала выполнить поиск по блокам и найти соответствие, скажем, для блока 27, затем я хочу найти каждый проект в этом блоке и перечислить файлы в этом проекте.
Проблема в том, что файлы могут и должны появляться на странице несколько раз, потому что некоторые файлы имеют несколько блоков, но я не могу придумать, как это лучше всего сделать, поиск по индексу строки кажется беспорядочным.
Чтобы помочь визуализировать то, что я хочу, вот изображение того, как будет структурирована страница: как будет структурирована страница http://biteof.com/example.bmp
Мы высоко ценим вашу помощь, спасибо.
Что у меня есть на данный момент:
name text utf8_unicode_ci
typeof set('swf','fla','web','pdf') utf8_unicode_ci No None
units text utf8_unicode_ci No None
url text utf8_unicode_ci No None
project set('sexual health','information literacy','experimental') utf8_unicode_ci No None
outcomes text utf8_unicode_ci No None
@Nick:
<?php
$query = "SELECT * FROM `repository` WHERE `units` = '27' LIMIT 0, 999 ";
$result=mysql_query($query) or die(mysql_error()) ;
$num = mysql_num_rows($result);
$i=0;
while ($i < $num) {
$name=mysql_result($result,$i,"name");
$filetype=mysql_result($result,$i,"typeof");
$project=mysql_result($result,$i,"project");
$units=mysql_result($result,$i,"units");
$url=mysql_result($result,$i,"url");
echo "File name: ".$name."<br>";
echo "Units: ".$units."<br>";
echo "In project: ".$project."<br>";
echo "Url: ".$url."<br>";
$i ;
}
?>
Комментарии:
1. То, что вы задаете, не является конкретным вопросом, это очень широкий вопрос.
2. Вы получите лучший ответ, если добавите то, что вы на самом деле сделали до сих пор. Включите ваши таблицы, поля (и некоторые данные, если возможно, несколько строк для каждой таблицы).
3. Хорошо, добавлена моя текущая структура, проблема с тем, что у меня есть сейчас, заключается в возможности добавлять несколько блоков и повторять файл в каждом конкретном блоке.
4. @Hogan Меня никто не нанимал это для сайта моего портфолио ученичества, мне нужно загрузить и отсортировать так много файлов, что перечислять их вручную слишком сложно.etc — Не следует предполагать, что
Ответ №1:
После прочтения вашего вопроса несколько раз кажется, что вы понимаете, как создавать таблицы, вам просто нужна помощь в их запросе. У вас есть код, которым вы можете поделиться, который вы пробовали?
Вероятно, вам следует выполнить объединение таблиц.
Комментарии:
1. Вроде того, но вся информация, которую я вижу, говорит о том, что это не сработает, не использовать наборы .etc используйте отдельные таблицы, но тогда я не понимаю их примеры или как это реализовать… но пока это все, что у меня есть для вывода части таблицы, не уверен, как посмотреть, какие проекты существуют внутри модуля, потому что, если в модуле нет файлов, скажем, «экспериментальных», я не хочу создавать экспериментальную область на странице. Редактировать: код здесь не поместится, проверьте вопрос внизу для кода.
2. Похоже, вам нужно запросить типы проектов, просмотреть результаты, а затем выполнить вложенный цикл, чтобы показать реальные проекты. Должна быть промежуточная таблица между результатами и проектами. Действительно сложно рассказать вам, как это сделать.
3. Я чувствую, что units все еще неверен, хотя, например, есть units с именем 310 и 10, поскольку я хочу сохранить несколько units прямо сейчас, я должен выполнить индекс поиска, но unit 10 будет отображаться как индекс 310 в настоящее время. Допустим, я перебрал результаты проекта и сохранил каждое значение в массиве (удалил дубликаты из массива), затем перебрал массив, чтобы создать область проектов под каждым модулем, а затем выполнил запрос к этому модулю, и этот проект для каждого проекта кажется возможным. Но знаете ли вы способ обойти мою дилемму units? Спасибо за совет, приятель.
Ответ №2:
Решено 🙂
Я решил создать новую таблицу для каждого модуля, потому что файл может быть одинаковым для разных модулей, но результаты будут разными. остальную часть моей базы данных я сохранил прежней и использовал php для сортировки, вероятно, ужасно структурированной базы данных … вот мой код, если вам интересно:
<?php
$table = array("301","302","310","311","25","26","27","28","29","1","2","3","4","8","10","X1","X2");
for ($a=0;$a<sizeof($table);$a ) {
$query = "SELECT * FROM `$table[$a]`";
$result=mysql_query($query) or die(mysql_error()) ;
$num = mysql_num_rows($result);
if ($num > 0) {
include($_SERVER['DOCUMENT_ROOT']."/units_and_evidence/units/".$table[$a].".php");
$projects = array();
for ($b=0;$b<$num;$b ) {
$project=mysql_result($result,$b,"project");
array_push($projects, $project);
}
$unique_projects = array_unique($projects);
for($c=0;$c<sizeof($unique_projects);$c ) {
$project_string = ucfirst($unique_projects[$c]);
print ('<div class="project"><h3>'.$project_string.'</h3>');
for($d=0;$d<$num;$d ) {
$name=mysql_result($result,$d,"name");
$project=mysql_result($result,$d,"project");
$typeof=mysql_result($result,$d,"typeof");
$url=mysql_result($result,$d,"url");
$outcomes=mysql_result($result,$d,"outcomes");
if ($project == $unique_projects[$c]) {
$outcomes_array= array();
for ($e=0;$e<strlen($outcomes);$e ) {
array_push($outcomes_array, $outcomes[$e]);
}
rsort($outcomes_array);
if ($typeof == swf) {
$proj = str_replace(' ', '', $project);
$file = str_replace(' ', '', $url);
print ('<li><a href="flashdelivery.php?proj='.urlencode($proj).'amp;file='.urlencode($file).'" class="'.$typeof.'selector">');
}
else {
print ('<li><a href="'.$url.'" class="'.$typeof.'selector">');
}
for ($f=0;$f<sizeof($outcomes_array);$f ) {
print ('<span class="n'.$outcomes_array[$f].'"></span>');
}
print ('amp;raquo; '.ucfirst($name).'</a></li>');
}
}
print ('</div>');
}
print ("</ul>");
}
}
include($_SERVER['DOCUMENT_ROOT']."/footer.php");
?>