ac-40-6.0
Эксперт
Дата регистрации:
29.06.2012 02:02:06
Сообщений: 88
Создал таблицы, написал код.
Итог: рановато Вам такое писать.
Причина такого итога: уже третий раз пишу рабочий код.
Этот полностью проверен на все возможные ошибки с перебором запросов до сотни.
[listn]<?php
error_reporting(E_ALL);
$bd = mysql_connect('localhost', 'root', '');//эти параметры заданы по умолчанию, их можно не менять
$basa = 'mybase';//имя базы данных, а не таблицы, вводить по буквам под диктовку
mysql_select_db($basa, $bd);
echo '<p><b>Меню</b></p>';
for($cat=1; $cat<=4; $cat++){
$row = mysql_query("SELECT `id` FROM `data` WHERE `cat`='$cat'", $bd);//выбираемые значения вводить также по символам сверяясь с PhpMyAdmin
$con = mysql_num_rows($row);//эта переменная отвечает за количество категорий
$sel = mysql_query("SELECT `value` FROM `categories` WHERE `cat`='$cat'",$bd);//выбираем значения по ЧИСЛОВОМУ индексу
$c = mysql_fetch_assoc($sel);//эта в ответе за значение категории
echo $c['value'], ' - ', $con, '<br/>';
}
?>[/listn]
Как сказал наш сенсей:
Если не поняли, значит, изучайте SQL, похоже, что Вы основ ещё не знаете даже. Здесь помогают учиться, а не пишут готовые функции и скрипты.
Учитесь.
Default
Эксперт
Дата регистрации:
12.06.2012 15:20:27
Сообщений: 102
Начнем с таблиц, чтобы было все понятно: 1 - я таблица
categories, хранит в себе id - уникальный индефикатор и title - название категории
id_||_title_____|
_1_||_Авто______|
_2_||_Мото______|
_3_||Марки авто_|
Вторая таблица
data, хранит в себе id - уникальный индефикатор, id_title - хранит в себе id заметки(по умолчанию в этом поле выставите 0, чтобы если для данной ктегори не было заметок, то выводилось бы 0 а не пустота)и comm - собственно сама заметка
id_||id_title||.comm................|
.1.||..2.....||Мото_дня.............|
.2.||..2.....||Красный_байк.........|
.3.||..1.....||Авто_года............|
.4.||..3.....||toyota...............|
.5.||..2.....||Мото на лето.........|
.6.||..3.....||Волга................|
.7.||..3.....||BMW_.................|
.8.||..1.....||км\ч у УАЗа..........|
.9.||..1.....||Проходимость у камаза|
10.||..2.....||.Цены на мото........|
Понятно, что в поле id_title вставляется id категории при добавлении новой заметки и все что надо было сделать это выбрать в цикле общее число id в таблице data, где id_title равен той или иной категории, вот как это получилось у меня
<?php
// устанавливаем соединение в БД
include_once "conf.php";
// запрос на выборку из таблици categories
$sql = mysql_query ("Select id, title, num_comm From categories"
// проверка
if(!$sql)exit(mysql_error());
// добавляем выбранное в ассосционный массив и выводим пока есть записи в БД
while ($result = mysql_fetch_assoc($sql)){
echo "<p><a href = 'cat.php?id=".$result['id']."'>";
echo $result['title'];
echo "</a>";
echo " - ";
// подключаемся к таблицне data, где лежат заметки к категориям где номер заметки равен текушей id категории
$sql_2 = mysql_query("Select count(id) From data WHERE id_title = '".$result['id']."'"
// проверяем подключение, если нет, то выводим ошибку
if(!$sql_2)exit(mysql_error());
// получаем число записей
$total = mysql_result($sql_2,0);
// выводим число
echo $total['id'];
echo "</p>";
// увеличиваем счетчик на 1 после каждого раза
$i++;
}
?>
не уверен, что хороший вариант в цикле подключаться к БД и делать какую-то выборку, но все же код работает, потому что полностью его у себя проверил. Код написан грубо, без проверок, так что хотя бы по минимум при выводе из таблице записи пропустите через функцию strip_tags() или htmlspecialchars(), проверок много не бывает.
P.S. можно сделать по другому, например, в таблице
categories добавить еще одно поле в которое будет изменяться на +1 к текушей записи при добавлении новой заметки и выберать уже все с одной таблице, но нужно менять код в админской панели, но не заостряйте на этом внимание, вам этого будет достаточно, а когда уже поймете, то сможете "вертеть" код так, как вам будет удобно.
Default
Эксперт
Дата регистрации:
12.06.2012 15:20:27
Сообщений: 102
Михаил, выше в моем коде, а именно в цикле идет каждый раз запрос в таблицу, ладно записей всего 3-ри, а если их 100, то не упадет ли скорость вывода?
Default
Эксперт
Дата регистрации:
12.06.2012 15:20:27
Сообщений: 102
ac-40-6.0, а если у Вас записей в таблице с категориями не 4, а 10, то Вы каждый раз будете менять число в цикле?
ac-40-6.0
Эксперт
Дата регистрации:
29.06.2012 02:02:06
Сообщений: 88
Нафига?
Перед запуском цикла прописываем:
$number = mysql_query("SELECT max(`cat`) FROM `categories`", $db);
$numb = mysql_fetch_assoc($number);
$num = $numb['max(`cat`)'];
В условии цикла даём $cat <= $num.
Всё!
Можно через while, но с ним я ещё путём не работал.
P.S. ко мне на Вы не надо. Я не страдаю ни манией величия, ни раздвоением личности на личности страдающие раздвоением личности вкупе с шизофренией.
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Да, при большом количестве записей быстродействие может упасть.
Default
Эксперт
Дата регистрации:
12.06.2012 15:20:27
Сообщений: 102
но а для вот таких малых задач код себя оправдывает?
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Конечно, для подобных задач можно не беспокоится о таких вещах.