|
|
|
| Честно говоря я даже не знаю к какому больше разделу относится мой вопрос к php или к mysql!
Есть таблица с названием рубрик:
id nameR TextR
1 trans транспорт
2 flat недвижимость
и т.д. их много
Подскажите как вывести список ссылок, кот. названия будет черпать из этой таблицы! (т.е. если появится новая рубрика я просто добавлю её в таблицу а на страничке появится новая ссылка)
И ещё вопрос есть вторая таблица в которой перечислены подрубрики для всех рубрик, т.е. в рубрику транспорт включены подрубрики автобусы, легковые автомобили, мотоциклы и т.д.для каждой рубрики соответственно, можно ли так сделать чтобы выбирая одну рубрику выводилась радиогруппа только с соотв-ими подрубриками!
Ой надеюсь я понятно объяснила! | |
|
|
|
|
|
|
|
для: lilu
(27.07.2005 в 21:17)
| | 1) А какой вид должны иметь ссылки?
2) Какова структура второй таблицы?
PS Всё что связано с MySQL лучше помещать в раздел http://www.softtime.ru/forum/index.php?id_forum=3 - там обсуждается как СУБД MySQL, запросы и администрирование, так и взаимодействие с MySQL из PHP и других языков программирования. | |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 21:27)
| | Ссылки в виде названий рубрик из этой таблицы!
структура второй таблицы
id nameP textP
1 legavto легковые автомобили
2 bus автобусы
и т.д. но т.к. это подрубрики и они связаны с рубриками, то может надо ещё одно поле для связи с первой таблицей , тогда структура будет такая
id nameP TextP idR
1 legavto легковые автомобили 1
2 bus автобусы 1
и т.д. В первой и во второй таблице id - auto_inc и он же primary key
Я просто не знаю как в mysql отображаются связи между таблицами | |
|
|
|
|
|
|
|
для: lilu
(28.07.2005 в 18:50)
| | 1) Для вывода ссылок можно воспользоваться следующим скриптом (так и не понятно какой должна быть ссылка)
<?php
// Устанавливаем соединение с базой данных
include "config.php";
// Формируем и выполняем запрос
$query = "SELECT * FROM catalog";
$cat = mysql_query($query);
if(!$cat) exit(mysql_error());
// В цикле выводим ссылки
while($catalog = mysql_fetch_array($cat))
{
echo "<a href=index.php?id=$catalog[id]>$catalog[textP]</a><br>";
}
?>
|
2) Теперь по переходу по ссылке в файле index.php можно выводить радио-кнопки, для этого можно воспользоваться кодом:
<?php
// Устанавливаем соединение с базой данных
include "config.php";
// Формируем и выполняем запрос
$query = "SELECT * FROM subcatalog WHERE idR=$_GET[id]";
$sub = mysql_query($query);
if(!$sub) exit(mysql_error());
// В цикле выводим ссылки
while($subcat = mysql_fetch_array($sub))
{
echo "<input type=radio>$subcat[TextP]<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(28.07.2005 в 19:27)
| | для cheops
Спасибо всё красиво выводит! Только вот как дальше мне проверять нажато ли и что именно в этой радиогруппе! Мне нужна какая-то переменная кот. будет хранить значение выбранного значения, кот. я буду использовать при написании выборки допустим по выбору этих значений из другой таблицы!>
Например из такой
id, idR, idP, idD, text, kontact, data
id- primary, auto_inc
idR и idP из таблицы "подрубрики"
idD из таблицы "действия"
Но прежде помогите мне разобраться со структурой третьей таблицы, а точнее со связями через доп. поля или как там можно по другому! | |
|
|
|
|
|
|
|
для: lilu
(28.07.2005 в 21:47)
| | В качестве имени можно использовать значение поля nameR таблицы с рубриками (catalog). Вот запрос, который извлечёт это значение.
"SELECT nameR FROM catalog WHERE id=$_GET[id]";
|
| |
|
|
|
|
|
|
|
для: lilu
(28.07.2005 в 18:50)
| | А никак не отображаются. Вы все правильно понимаете: делаете дополнительное поле, и на основании его фильтруете данные. | |
|
|
|
|
|
|
|
для: Loki
(28.07.2005 в 19:35)
| | для Loki
Вы знаете это просто когда двойная вложенность, вот как у меня сейчас рубрики-подрубрики! А мне надо ещё третья рубрики-подрубки-действия!
Т.е. если у меня 10 рубрик в каждой по 6 подрубрик -то во второй таблице у меня хошь или нет будет 60 записей! Это ещё ничего!
А вот представьте что каждую подрубрику можно продать, купить, обменять, а для некоторых есть специфические действия, кот. для всех не подходят например, ищу работу или утеряно,
т.е. была первая таблица "рубрики" - с полями
idR, nameR, textR в ней 10 записей(рубрик)
вторая таблица "подрубрики"
idP, nameP, textP, idR в ней 60 записей (подрубрик) idR связывает её с таблицей "рубрики "
и наконец третья таблица "действия", в ней перечислены всевозможные действия с рубриками, но не каждое действие подходит к каждой рубрике и если сделать такую структуру
idD, nameD, textD, idP(для связи с таблицей "подрубрики") вы представляете сколько там будет записей если действий более 10! Если каждую подрубрику можно как минимум купить, продать, большинство арендовать и обменять
Ой, так что мне тогда делать
вот какую мне тогда структуру для третьей таблицы сделать .....:((((( | |
|
|
|
|
|
|
|
для: lilu
(28.07.2005 в 22:03)
| | А для чего нужна третья таблица? Я было принялся её выдумывать, но мне кажется она лишняя... | |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 00:24)
| | cheops: "А для чего нужна третья таблица? Я было принялся её выдумывать, но мне кажется она лишняя..."
А как же без неё!
А что же тогда с действиями делать, может их как-то программно задать например в виде массива но если подрубрики выводятся в цикле из базы то как опред-ые действия связать с конкретной подрубрикой! Ох! | |
|
|
|
|
|
|
|
для: lilu
(29.07.2005 в 14:41)
| | Посмотрите двумя постами ниже - в этом случае, все данные можно запихнуть в одну таблицу. А с действиями - еще проще: каждому действию присваивается код, который вдвое больше предыдущего. Таким образом, можно на все действия ввести всего одно поле (так реализовано кодирование прав доступа к файлам). | |
|
|
|
|
|
|
|
для: Loki
(29.07.2005 в 15:48)
| | Если честно я с таким не сталкивалась но возможно это выход, объясните на примере пожалуйста, я примерно поняла но всё же.... | |
|
|
|
|
|
|
|
для: lilu
(29.07.2005 в 16:04)
| | Есть у нас знакомая Маша. Пытаемся описать следующие ее качества:
Высокая - 1
Стройная - 2
Умная - 4
незамужняя - 8
если сумма характеристик, которыми обладает Маша получилось 9, то мы знаем, что она высокая, полная, глупая и, как следствие, не замужем:)
если 7, то понятно что высокие, стройные и умные редко бывают свободны:) и так далее.
разбирал бы значения я слудующим образом:
<?
$masha=9;
if ($masha>=8) $text.="незамужняя ";
$masha-=8;
if ($masha>=4) $text.="умная ";
$masha-=4;
if ($masha>=2) $text.="стройная ";
$masha-=2;
if ($masha>=1) $text.="высокая ";
$masha-=1;
echo $text;
?>
|
Код грубый. можно его оптимизировать чтобы количество характеристих задавалось извне. Но в качестве примера - нормально. | |
|
|
|
|
|
|
|
для: Loki
(29.07.2005 в 16:15)
| | Помоему для этих здач поле типа SET больше подходит... более наглядно получится... | |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 17:35)
| | Собственно, по этому принципу оно и работает, если я правильно понял из описания.
Ну и кроме того, работая с полем SET мы все равно на выходе будем получать строку, которую придется разбирать. | |
|
|
|
|
|
|
|
для: Loki
(29.07.2005 в 17:53)
| | Ну можно и циферки получить, если ноль к значению прибавить, произойдёт автоматическое приведение к числу. Правда я предпочитаю возится со строками - наглядность возрастает многократно при работе со строками по сравнению с магическими цифрами... | |
|
|
|
|
|
|
|
для: lilu
(29.07.2005 в 14:41)
| | Всё равно не понятно зачем нужна таблица для действий - приведите пример её использования если не сложно... нам очень трудно понять, что требуется так как у нас нет тех.задания и мы не знаем что требуется в конечном итоге от системы. | |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 17:34)
| | >Всё равно не понятно зачем нужна таблица для действий -
>приведите пример её использования если не сложно... нам
>очень трудно понять, что требуется так как у нас нет
>тех.задания и мы не знаем что требуется в конечном итоге от
>системы.
Может и не нужна
На самом деле задача кажется на первый взгляд очень простая!
Задача приём-подача объявлений!
Есть рубрики это - автомобили, быт. техника, недвижимость и т.д.
У каждой есть подрубрики например у автомобилей легковые и грузовые и т.д. у бытовой техники - холодильники, пылесосы и т.д. Каждая подрубрика имеет опред-ый набор действий, кот. может совпадать с действиями другой подрубрики а может и не совпадать! Пользователи должны иметь возможность разместить своё объявление и выбрать все его интересующие! | |
|
|
|
|
|
|
|
для: lilu
(29.07.2005 в 18:25)
| | Если этих действий меньше 64, то проще ввести в таблицу дополнительное поле типа SET - каждый бит этого поля может принимать 1 или 0 (включено/выключено). А при использовании поля можно будет оперировать списком действий. Если же операций больше 64, тогда действительно следует вводить третью таблицу и использовать многотабличные запросы. | |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 18:29)
| | Действий 10!
Если можно напишите примерную сруктуру таблицы! | |
|
|
|
|
|
|
|
для: lilu
(29.07.2005 в 18:38)
| | А вы не могли бы перечислить названия действий, как вы хотите их назвать? | |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 19:40)
| | Да конечно:
sell - продаю
buy - куплю
arenda - аренда
obmen - обмен
remont - ремонт
vakansii - вакансии
needjob - ищу работу
cando - предлагаю услуги
needdo - необходимы услуги
find - найдено
loss - утеряно
uhod - средства по уходу
ну вот примерно так, может что-то потом добавится | |
|
|
|
|
|
|
|
для: lilu
(29.07.2005 в 20:57)
| | Тогда к полям
и
Добавьте ещё одно поле action
action SET('sell','buy','arenda','obmen','remont','vakansii','needjob','cando','needdo','find','loss','uhod') NOT NULL default ''
|
Добавлять данный в таблицу с таким полем можно следующим образом
INSERT INTO auth VALUES ('fgfdgfd', 'gfdgfdgd', 'sell,buy,arenda,obmen');
INSERT INTO auth VALUES ('fgfdgfd', 'gfdgdfgfdg', 'sell,buy,arenda,obmen,find,loss,uhod');
|
| |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 22:46)
| | Да об этом способе я думала с самого начала , но с полями типа set я никогда не работала, старалась их как-то заменить др. способом, но здесь видно придётся делать так как вы советуете!
Только я добавила поле action типа set не в таблицу подрубрики а в таблицу рубрики, т.к. для всех подрубрик одной рубрики действия одни и те же и вот какая структура таблиц у меня получилась:
rubrika
idR, nameR, textR, action
podrubrika
idP, nameP, textP, idR
И вот начались проблемы и непонятки для меня!
Я воспользовалась вашими запросом на вывод ссылок в виде названий рубрик, при нажатии на которую должны выводится радиогруппа названий соот-их подрубрик из таблицы подрубрики и названия соотв-их действий из таблицы рубрики! Подрубрики выводятся красиво а вот названия действий в виде списка одной строкой через запятуюю! Помогите мне с запросом! | |
|
|
|
|
|
|
|
для: lilu
(03.08.2005 в 14:07)
| | >Я воспользовалась вашими запросом на вывод ссылок в виде
>названий рубрик, при нажатии на которую должны выводится
>радиогруппа названий соот-их подрубрик из таблицы подрубрики
>и названия соотв-их действий из таблицы рубрики! Подрубрики
>выводятся красиво а вот названия действий в виде списка
>одной строкой через запятуюю! Помогите мне с запросом!
Ну всё правильно - вы просто разбейте строку на составные части
<?php
$text = 'sell,buy,arenda,obmen,find,loss,uhod';
// Разбиваем строку по запятой
$arr = explode(",",$text);
// Выводим содержимое массива $arr в цикле
foreach($arr as $value) echo $value."<br>";
?>
|
| |
|
|
|
|
|
|
|
для: lilu
(03.08.2005 в 14:07)
| | >названия действий в виде списка одной строкой через запятую
Как я понимаю, средствами mysql это не сделать, надо полученную строку разбирать потом средствами php... например
<?
$action=explode(",",$action); //получаем массив значений.
?>
|
| |
|
|
|
|
|
|
|
для: Loki
(03.08.2005 в 14:23)
| | Можно и средствами MySQL проверить имеется ли в списке значение или нет, но тут действительно удобнее разбить результат и работать с массивом. | |
|
|
|
|
 1.9 Кб |
|
|
для: cheops
(03.08.2005 в 14:28)
| | С ВЫВОДОМ массива действий я разобралась, но ... ПОТОМ ВООБЩЕ МРАК
вот так выводятся значения радиогруппы подрубрик
<?php
$query2 = "SELECT textR FROM rubrika WHERE idR=$_GET[idR]";
$sub2 = mysql_query($query2);
if(!$sub2) exit(mysql_error());
while($cat2 = mysql_fetch_array($sub2))
{
echo "$cat2[textR]<br>";
}
?>
|
а вот так радиогруппа действий
<?php
$query1 = "SELECT * FROM podrubrika WHERE idR=$_GET[idR]";
$sub1 = mysql_query($query1);
if(!$sub1) exit(mysql_error());
// В цикле выводим ссылки
while($cat = mysql_fetch_array($sub1))
{
echo "<input type=radio>$cat[textP]<br>";
}
?>
|
Как будет выглядеть запрос на добавление записей в третью таблицу после выбора пользователем значений этих радиогрупп! Самое интересное что нажимаю на любое значение радиогруппы даже точка не появляется как буд-то значение не выбирается вовсе! Почему так!
Структура третьей таблицы
id - счётчик
idR - номер нажатой ссылки (название рубрики)
idP - номер выбранного значения радиогруппы из названий подрубрик
action - одно из выбранных действий в радиогруппе
text - текст объявления, кот. вводит сам пользователь в поле ввода
kontact - контактные данные, кот. вводит сам пользователь в поле ввода
data - текущая дата!
На всякий случай код в виде файла прилается!
Совсем запуталась с передаваемыми значениями! | |
|
|
|
|
|
|
|
для: lilu
(04.08.2005 в 15:40)
| | У вас имя радио-кнопкам не присвоено
<?php
echo "<input type=radio>$cat[textP]<br>";
?>
|
А всё, что не названо в HTML-форме не передаётся, следует обозвать группу радио-кнопок одним именем
<?php
echo "<input type=radio name=category>$cat[textP]<br>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(05.08.2005 в 18:27)
| | Да действительно, точки при выборе значения появляются но вот значение эта переменная хранит какое-то странное
вот например мой запрос
<?php
$q="INSERT INTO full (idR, idP, action, text, kontact, data)
VALUES ('$_GET[idR]', '$_POST[deyst]', '$_POST[categ]', '$_POST[textob]', '$_POST[kontact]', NOW())";
?>
|
вот какой результат
INSERT INTO full (idR, idP, action, text, kontact, data) VALUES ('', 'on', 'on', 'рррр', 'ееее', NOW())Данные внесены успешно
т.е. $_GET[idR] вообще не признаёт хотя в цикле названия подрубрик выводятся правильно!
$_POST[deyst] и $_POST[categ] - значение on! Почему так? | |
|
|
|
|
|
|
|
для: lilu
(08.08.2005 в 13:16)
| | Да всё правильно именно on присваивается по умолчанию, если вы хотите присвоить другое значение в тэг <input> следует добавить атрибут value
<?php
echo "<input type=radio name=category value='$cat[textP]'>$cat[textP]<br>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(08.08.2005 в 13:31)
| | вот это то что надо, спасибо!
но $_GET[idR] всё равно не опознаётся
idR хранит значение - номер нажатой ссылки (название рубрики)
Я просто не понимаю почему когда я вывожу эту переменную
<?php
$w=$_GET[idR];
echo "$w";
?>
|
то она показывает правильный номер, но как только дело доходит до запроса эта переменная как буд-то пустая ....:((( | |
|
|
|
|
|
|
|
для: cheops
(03.08.2005 в 14:28)
| | Первый файл, с кот. вызывается этот ... | |
|
|
|
|
|
|
|
для: lilu
(28.07.2005 в 22:03)
| | У меня схожая ситуация с глубоким меню была некоторое время назад. У меня есть древовидное меню, работающее какраз с базой данных, есть правда кое-какие нюансы... Если что, пишите на ящик. | |
|
|
|
|
|
|
|
для: lilu
(28.07.2005 в 22:03)
| | Тогда я бы пошел другим путем:
id
...
тут поля с данными
...
уровень вложенности
родитель
|
При такой структуре вы можете организовать дерево любой степени вложенности и легко перемещать его элементы между ветвями.
То есть для верхнего уровня значение уровня вложенности будет 0, а родитель - NULL, для вложенных элементов - уровень 1, а в качестве родителя id родительской записи.
Удобно тем, что можно использовать рекурсию. Это же и неудобно:) | |
|
|
|