[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите правильно составить запрос MySQL
GET
Здравствуйте, как - то обходился без сложных запростов, но сейчас встала необходимость делать одновременную выборку.

Есть таблица A, там строка (сокращенная):

..id_a..|..t1..|..t2..|..t3..|

..55.....|..2...|...4..|..8...|

поля t1,t2,t3 - int, и являются id другой таблицы B

..id_b..|..varchar..|

....1....|...белый...|
....2....|...красный|
...
....4....|...синий....|
...
....8....|...черный..|

Делаю такой запрос:

$d=mysql_query("SELECT * FROM `a`,`b` WHERE id_a=55 AND id_b=t1");
$d_i=mysql_fetch_assoc($d);
echo $d_i['id_b'];


на выходе получаю красный...все работает, как сформировать запрос так, чтоб за один раз получить остальные два значения?



Спустя 7 минут, 33 секунды (22.11.2011 - 09:52) TranceIT написал(а):

for ($i = 1; $i++; $i<=3) {
$d=mysql_query("SELECT a.t" . $i . ", varchar FROM `a`,`b` WHERE a.id_a=55 AND b.id_b=t" . $i);
$d_i=mysql_fetch_assoc($d);
echo $d_i['id_b'];
}

Примерно так, синтаксис только подкорректировать...

Спустя 6 минут, 2 секунды (22.11.2011 - 09:58) TranceIT написал(а):
Если это полный вариант таблиц, то я бы не парился и объединил их...

Спустя 4 минуты, 41 секунда (22.11.2011 - 10:03) GET написал(а):
TranceIT

Спасибо...я думал, о цикле или массиве, но это 3 SELECT'a. Понимаю, что WHERE однозначно определяет строку во второй таблице. Я имею ввиду может быть есть способ что-то типа (id_b=t1 OR id_b=t2 OR id_b=t3) это строка конечно глупость, но может есть какой-то способ, как получит массив значений столбца что-ли...

Спустя 11 минут, 31 секунда (22.11.2011 - 10:14) TranceIT написал(а):
Попробуйте так:

$d=mysql_query("SELECT varchar FROM `a`,`b` WHERE a.id_a=55 AND b.id_b=t1 AND b.id_b=t2 AND b.id_b=t3");
$d_i=mysql_fetch_assoc($d);
echo $d_i['id_b'];

Спустя 5 минут, 11 секунд (22.11.2011 - 10:20) twin написал(а):
Для таких вопросов нужно дамп выкладывать, а не такие непонятные вещи
..id_a..|..t1..|..t2..|..t3..|

..55.....|..2...|...4..|..8...|

По сабжу, почитай про JOIN

Спустя 1 час, 10 минут, 1 секунда (22.11.2011 - 11:30) GET написал(а):
Таблица А
CREATE TABLE `a` (
`id_a` int(11) NOT NULL auto_increment,
`t1` int(11) NOT NULL,
`t2` int(11) NOT NULL,
`t3` int(11) NOT NULL,
`name` int(11) default NULL,
PRIMARY KEY (`id_a`)
)
ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

INSERT INTO `a` VALUES (1, 1, 2, 4, 1);
INSERT INTO `a` VALUES (2, 6, 1, 4, 1);
INSERT INTO `a` VALUES (3, 5, 2, 5, 2);
INSERT INTO `a` VALUES (4, 6, 1, 1, 2);


Таблица В

CREATE TABLE `b` (
`id_b` int(11) NOT NULL auto_increment,
`varchar` varchar(10) NOT NULL,
PRIMARY KEY (`id_b`)
)
ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

INSERT INTO `b` VALUES (1, 'белый');
INSERT INTO `b` VALUES (2, 'красный');
INSERT INTO `b` VALUES (3, 'синий');
INSERT INTO `b` VALUES (4, 'черный');
INSERT INTO `b` VALUES (5, 'оранжевый');
INSERT INTO `b` VALUES (6, 'голубой');


Таблица С
CREATE TABLE `s` (
`id_c` int(11) NOT NULL auto_increment,
`v1` varchar(10) NOT NULL,
`v2` varchar(10) NOT NULL,
`v3` varchar(10) NOT NULL,
PRIMARY KEY (`id_c`)
)
ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

INSERT INTO `s` VALUES (1, 'Алексей', 'Александр', 'Антон');
INSERT INTO `s` VALUES (2, 'Сергей', 'Владимир', 'Марина');



Вот скрипт:

	$d=mysql_query("SELECT * FROM `a`,`b`,`s` WHERE id_a=3 AND id_b=t2 AND id_c=name",$a_db) or die ("ERROR #401(d).".mysql_error());
if (mysql_num_rows($d))
{
$d_i=mysql_fetch_assoc($d);

$t2=$d_i['t2'];
$varchar=$d_i['varchar'];
$name=$d_i['v3'];
echo $t2.'-'.$varchar.'-'.$name;
}


выводит:

2-красный-Марина

Спустя 3 минуты, 10 секунд (22.11.2011 - 11:33) GET написал(а):
TranceIT

На выходе должно быть 3 значения

т.е. в моем примере оранжевый, красный, оранжевый(5-2-5)

Спустя 24 минуты, 46 секунд (22.11.2011 - 11:57) GET написал(а):
Запрос:

"SELECT * FROM `b` INNER JOIN `a` ON id_a=3 AND (id_b=t1 OR id_b=t2 OR id_b=t3)"


Дает 2-красный...

Спустя 5 минут, 58 секунд (22.11.2011 - 12:03) GET написал(а):
Вопрос снят...спасибо php-admin'у smile.gif INNER JOIN - удивительно!


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

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