Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод данных из mysql после UNION
 
 автор: V1a8xerss87   (17.04.2010 в 13:31)   письмо автору
 
 

Здравствуйте.
Имеется 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" данные не цепляются. Подскажите, что я неверно сделал?

  Ответить  
 
 автор: cheops   (17.04.2010 в 14:28)   письмо автору
 
   для: V1a8xerss87   (17.04.2010 в 13:31)
 

>Подскажите, что я неверно сделал?
Почему не верно, вас не устраивает результат? Если да, то чем не устраивает.

PS У вас получается одна строка, так как mysql_fetch_row() не помещен в цикл. Так и задумано?

  Ответить  
 
 автор: V1a8xerss87   (17.04.2010 в 14:36)   письмо автору
 
   для: cheops   (17.04.2010 в 14:28)
 

да, мне нужна одна строка из каждой таблицы. Почему и стоит "Where"...
Но почему работает только:
echo $r['1'].$r['2'];
а вот из второй таблицы полученные данные не выводит...

  Ответить  
 
 автор: Valick   (17.04.2010 в 14:58)   письмо автору
 
   для: V1a8xerss87   (17.04.2010 в 14:36)
 

вторая таблица - это уже вторая строка... вы же выводите только одну строку и удивляетесь
применяйте цикл ну или..
$r1=mysql_fetch_row($s);
$r2=mysql_fetch_row($s);
на худой конец

  Ответить  
 
 автор: V1a8xerss87   (17.04.2010 в 15:01)   письмо автору
 
   для: Valick   (17.04.2010 в 14:58)
 

Понял. Ступил :) Спасибо :)

  Ответить  
 
 автор: Trianon   (17.04.2010 в 15:07)   письмо автору
 
   для: V1a8xerss87   (17.04.2010 в 13:31)
 

Интересно, как Вы будете определять, где у Вас из servers информация, а где из clients?

  Ответить  
 
 автор: V1a8xerss87   (17.04.2010 в 15:14)   письмо автору
 
   для: Trianon   (17.04.2010 в 15:07)
 

я через цикл решил не делать, а заюзать 2 раза mysql_fetch_row. как итог, все гуд.

  Ответить  
 
 автор: Valick   (17.04.2010 в 15:20)   письмо автору
 
   для: V1a8xerss87   (17.04.2010 в 15:14)
 

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

  Ответить  
 
 автор: V1a8xerss87   (17.04.2010 в 15:27)   письмо автору
 
   для: Valick   (17.04.2010 в 15:20)
 

да, согласен, через одно место получается. но как раз условие where спасает, в системе есть еще 3-я таблица связывающая эти две, и если в третьей есть запись, то 100% будут и в двух других.
Просто пока делаю, что бы работало, потом начнется оптимизация :)

  Ответить  
 
 автор: Valick   (17.04.2010 в 15:34)   письмо автору
 
   для: V1a8xerss87   (17.04.2010 в 15:27)
 

Просто пока делаю, что бы работало, потом начнется оптимизация :)
вот потом уж точно не захочется ничего переделывать

  Ответить  
 
 автор: V1a8xerss87   (17.04.2010 в 15:35)   письмо автору
 
   для: Valick   (17.04.2010 в 15:34)
 

ну, эт да, возможно. Ладно, уговорили :) сделаю через цикл. Спасибо ;)

  Ответить  
 
 автор: Trianon   (17.04.2010 в 15:42)   письмо автору
 
   для: V1a8xerss87   (17.04.2010 в 15:14)
 

Цикл не цикл - неважно.
Как Вы определите, какая из строк взята из которой из таблиц?
UNION даст неотсортированный результат. Порядок строк в нем неопределен.
Или Вы решили, что если servers раньше написали, то он первым вылезет? Фиг!

  Ответить  
 
 автор: V1a8xerss87   (17.04.2010 в 15:49)   письмо автору
 
   для: Trianon   (17.04.2010 в 15:42)
 

мм...и как быть?

  Ответить  
 
 автор: Valick   (17.04.2010 в 15:57)   письмо автору
 
   для: V1a8xerss87   (17.04.2010 в 15:49)
 

может не нуно тут три таблицы? :)

  Ответить  
 
 автор: V1a8xerss87   (17.04.2010 в 16:02)   письмо автору
 
   для: Valick   (17.04.2010 в 15:57)
 

Ладно, нужно еще подумать..
спасибо всем. буду думать :)

  Ответить  
 
 автор: Valick   (17.04.2010 в 16:08)   письмо автору
 
   для: V1a8xerss87   (17.04.2010 в 16:02)
 

вот за подумать я обеими руками.
опишите стоящую перед Вами задачу (с конца мы уже начали, так давайте вернемся к истокам), а так же сущьности таблиц.. что-то мне подсказывает что выборка по одноименному sid (которые в двух разных таблицах с автоинкрементом) "пахнет жареным"...

  Ответить  
 
 автор: baston   (17.04.2010 в 16:58)   письмо автору
 
   для: 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

  Ответить  
 
 автор: Trianon   (17.04.2010 в 18:32)   письмо автору
 
   для: baston   (17.04.2010 в 16:58)
 

уравнивать первичные ключи сервера и клиента примерно как уравнивать номера паспорта и драйв лайсенз. Может и сработает где - да только на беду.

Какой смысл тащить эти данные одним запросом?

  Ответить  
 
 автор: baston   (17.04.2010 в 19:00)   письмо автору
 
   для: Trianon   (17.04.2010 в 18:32)
 

>Какой смысл тащить эти данные одним запросом?

Наверное, вопрос не ко мне...
Автор хотел получить данные из обеих таблиц одним запросом.

  Ответить  
 
 автор: Trianon   (17.04.2010 в 23:58)   письмо автору
 
   для: baston   (17.04.2010 в 19:00)
 

Оно конечно.
Но не всяким [даже собственным] желаниям стоит потворствовать :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования