|
|
|
| Здравствуйте.
Имеется 2 таблицы:
CREATE TABLE `clients` (
`cid` int(11) NOT NULL auto_increment,
`name` varchar(200) NOT NULL,
`description` text NOT NULL,
PRIMARY KEY (`cid`)
)
|
и
CREATE TABLE `servers` (
`sid` int(11) NOT NULL auto_increment,
`name` varchar(200) NOT NULL,
`description` longtext NOT NULL,
PRIMARY KEY (`sid`)
)
|
Хочу за один запрос получить значения из обоих таблиц:
$s=mysql_query(" (SELECT sid,name FROM servers WHERE sid='1') UNION (SELECT cid,name FROM clients WHERE cid='1') ") or die (mysql_error());
$r=mysql_fetch_row($s);
|
далее в массиве $r данные из таблицы "servers" есть, а вот из таблицы "clients" данные не цепляются. Подскажите, что я неверно сделал? | |
|
|
|
|
|
|
|
для: V1a8xerss87
(17.04.2010 в 13:31)
| | >Подскажите, что я неверно сделал?
Почему не верно, вас не устраивает результат? Если да, то чем не устраивает.
PS У вас получается одна строка, так как mysql_fetch_row() не помещен в цикл. Так и задумано? | |
|
|
|
|
|
|
|
для: cheops
(17.04.2010 в 14:28)
| | да, мне нужна одна строка из каждой таблицы. Почему и стоит "Where"...
Но почему работает только:
echo $r['1'].$r['2'];
а вот из второй таблицы полученные данные не выводит... | |
|
|
|
|
|
|
|
для: V1a8xerss87
(17.04.2010 в 14:36)
| | вторая таблица - это уже вторая строка... вы же выводите только одну строку и удивляетесь
применяйте цикл ну или..
$r1=mysql_fetch_row($s);
$r2=mysql_fetch_row($s);
на худой конец | |
|
|
|
|
|
|
|
для: Valick
(17.04.2010 в 14:58)
| | Понял. Ступил :) Спасибо :) | |
|
|
|
|
|
|
|
для: V1a8xerss87
(17.04.2010 в 13:31)
| | Интересно, как Вы будете определять, где у Вас из servers информация, а где из clients? | |
|
|
|
|
|
|
|
для: Trianon
(17.04.2010 в 15:07)
| | я через цикл решил не делать, а заюзать 2 раза mysql_fetch_row. как итог, все гуд. | |
|
|
|
|
|
|
|
для: V1a8xerss87
(17.04.2010 в 15:14)
| | а если во второй таблице не окажется искомой строки, знаете что тогда будет?
не делайте через ...опу, делайте через цикл как все белые люди | |
|
|
|
|
|
|
|
для: Valick
(17.04.2010 в 15:20)
| | да, согласен, через одно место получается. но как раз условие where спасает, в системе есть еще 3-я таблица связывающая эти две, и если в третьей есть запись, то 100% будут и в двух других.
Просто пока делаю, что бы работало, потом начнется оптимизация :) | |
|
|
|
|
|
|
|
для: V1a8xerss87
(17.04.2010 в 15:27)
| | Просто пока делаю, что бы работало, потом начнется оптимизация :)
вот потом уж точно не захочется ничего переделывать | |
|
|
|
|
|
|
|
для: Valick
(17.04.2010 в 15:34)
| | ну, эт да, возможно. Ладно, уговорили :) сделаю через цикл. Спасибо ;) | |
|
|
|
|
|
|
|
для: V1a8xerss87
(17.04.2010 в 15:14)
| | Цикл не цикл - неважно.
Как Вы определите, какая из строк взята из которой из таблиц?
UNION даст неотсортированный результат. Порядок строк в нем неопределен.
Или Вы решили, что если servers раньше написали, то он первым вылезет? Фиг! | |
|
|
|
|
|
|
|
для: Trianon
(17.04.2010 в 15:42)
| | мм...и как быть? | |
|
|
|
|
|
|
|
для: V1a8xerss87
(17.04.2010 в 15:49)
| | может не нуно тут три таблицы? :) | |
|
|
|
|
|
|
|
для: Valick
(17.04.2010 в 15:57)
| | Ладно, нужно еще подумать..
спасибо всем. буду думать :) | |
|
|
|
|
|
|
|
для: V1a8xerss87
(17.04.2010 в 16:02)
| | вот за подумать я обеими руками.
опишите стоящую перед Вами задачу (с конца мы уже начали, так давайте вернемся к истокам), а так же сущьности таблиц.. что-то мне подсказывает что выборка по одноименному sid (которые в двух разных таблицах с автоинкрементом) "пахнет жареным"... | |
|
|
|
|
|
|
|
для: V1a8xerss87
(17.04.2010 в 13:31)
| | Я возможно неверно понимаю ваше задание, но почему бы вам не воспользоваться многотабличным запросом, типа таким:
select s.sid, s.name, c.cid, c.name from servers as s, clients as c where
s.sid = c.cid
|
Получится примерно так (скриншот): http://clip2net.com/clip/m8665/1271509044-clip-26kb.jpg
В каждой строке данные из обоих таблиц и каждое значение в своем поле.
Или это не совсем (или совсем) не то, что вы хотели?
Ну, и ограничить выводом одной записи (limit 1)...
Ну, или так:
where
s.sid = 1 and c.cid = 1
|
| |
|
|
|
|
|
|
|
для: baston
(17.04.2010 в 16:58)
| | уравнивать первичные ключи сервера и клиента примерно как уравнивать номера паспорта и драйв лайсенз. Может и сработает где - да только на беду.
Какой смысл тащить эти данные одним запросом? | |
|
|
|
|
|
|
|
для: Trianon
(17.04.2010 в 18:32)
| | >Какой смысл тащить эти данные одним запросом?
Наверное, вопрос не ко мне...
Автор хотел получить данные из обеих таблиц одним запросом. | |
|
|
|
|
|
|
|
для: baston
(17.04.2010 в 19:00)
| | Оно конечно.
Но не всяким [даже собственным] желаниям стоит потворствовать :) | |
|
|
|