Помогите составить sql запрос на выборку из трех таблиц

seosniks
На сайте с 13.08.2007
Offline
389
2441

Всем добрый вечер, в общем 2 день что то торможу я.

Есть три таблицы

это

bilets

glava
var_otv

таблица bilets хранит билеты

glava хранит номер главы 1 2 3 4 5

var_otv варианты ответов.

пример одного билета указаны столбцы

bilets id автоинкремент

glava таблица в которой размещены номера глав

vopros Собственно сам вопрос

var это номер билета билеты идут в таком виде,

глава 1- билеты 1 2 3 4

глава 2 билеты 1 2 3 4 5 6 100 итд.

каждая глава имеет от 10 до 100 билетов. + на каждыйц билет от 1 до 8 вариантов отвтеов.

У мен яне выходит связать эти таблицы при выборке.

Нужно допустим выбрать все билеты из одной конкретной главы,

либо конкретный билет но не просто выбрать

а выбрать так же, варианты ответа к этому билету из таблицы. var_otv

Пример запросов.

$sql = mysql_query("SELECT   bilets.*,glava.* FROM   bilets, glava WHERE glava.id= bilets.glava  and bilets.glava ='1' and   bilets.var='1' ");

if(mysql_num_rows($sql) >0) {
while($r = mysql_fetch_array($sql)) {
echo ' </b>вопрос <b> '. $r["vopros"] .' правильй ответ '. $r["pravilno"] ;
} }

$sql2 = mysql_query("SELECT * FROM var_otv,glava WHERE glava.id= var_otv.glava and glava.id='1' and vopros='1' limit 0,10 ");
if(mysql_num_rows($sql2) >0) {
while($r2 = mysql_fetch_array($sql2)) {
echo '</b>Вариант Ответа №<b> '. $r2["v_otv"] .'<br />' ;
}}

Вот эти два запроса выводят один вопрос и все ответы на него..

Но если я делаю все одним запросом то выходит ошибка.

Проблема к том что у меня выводятся все билеты c № 1 из каждой главы.

Может сдесь нужен order by

Простите в Sql я не силен. :mad:

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

с примерами вопросов и ответов.

Вот примерная структура.

Вот пример дампа базы


--
-- Структура таблицы `bilets`
--

CREATE TABLE `bilets` (
`id` int(20) NOT NULL auto_increment,
`glava` varchar(255) default NULL,
`vopros` varchar(255) NOT NULL,
`otvets` varchar(255) default NULL,
`pravilno` varchar(15) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

--
-- Дамп данных таблицы `bilets`
--

INSERT INTO `bilets` VALUES (1, '1', 'Вопрос 1 Как часто вы бухаете', '1', 'Я не пью вообще');
INSERT INTO `bilets` VALUES (2, '1', 'Как много вы курите', '2', 'Не курю');
INSERT INTO `bilets` VALUES (3, '2', 'Вопрос 1 Любите ли вы женщин', '1', 'Конечно люблю');
INSERT INTO `bilets` VALUES (4, '2', 'Вопрос 2 Вы дурак?', '2', 'Сам дурак');

-- Структура таблицы `glava`

CREATE TABLE `glava` (
`id` int(2) NOT NULL default '0',
`title_glava` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

-- Дамп данных таблицы `glava`

INSERT INTO `glava` VALUES (1, 'Культура человека');
INSERT INTO `glava` VALUES (2, 'Ваш менталитет.');

-- Структура таблицы `var_otv`

CREATE TABLE `var_otv` (
`id` int(100) NOT NULL auto_increment,
`otvets` varchar(255) default NULL,
`n_otv` varchar(10) NOT NULL,
`v_otv` varchar(255) default NULL,
`glava` int(15) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

-- Дамп данных таблицы `var_otv`

INSERT INTO `var_otv` VALUES (1, '1', '1', 'Синячу по черному', 1);
INSERT INTO `var_otv` VALUES (2, '1', '2', 'Не люблю бухать', 1);
INSERT INTO `var_otv` VALUES (3, '1', '3', 'Когда есть бухаю', 1);
INSERT INTO `var_otv` VALUES (4, '1', '4', 'Если наливают', 1);
INSERT INTO `var_otv` VALUES (5, '2', '1', 'По блоку в день', 2);
INSERT INTO `var_otv` VALUES (6, '2', '2', 'Дурак не дурак, но дурак.', 2);
AlexanderPHP
На сайте с 03.10.2011
Offline
54
#1

Не вникал в суть задания, т.к. некогда...

Делай вот по такому принципу:


SELECT * FROM bilets INNER JOIN var_otv INNER JOIN glava ON glava.id=var_otv.glava
Дипломированный программист.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий