Есть таблица 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) это строка конечно глупость, но может есть какой-то способ, как получит массив значений столбца что-ли...
Спасибо...я думал, о цикле или массиве, но это 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
..id_a..|..t1..|..t2..|..t3..|
..55.....|..2...|...4..|..8...|
По сабжу, почитай про JOIN
Спустя 1 час, 10 минут, 1 секунда (22.11.2011 - 11:30) GET написал(а):
Таблица А
Таблица В
Таблица С
Вот скрипт:
выводит:
2-красный-Марина
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)
На выходе должно быть 3 значения
т.е. в моем примере оранжевый, красный, оранжевый(5-2-5)
Спустя 24 минуты, 46 секунд (22.11.2011 - 11:57) GET написал(а):
Запрос:
Дает 2-красный...
"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'у INNER JOIN - удивительно!
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.