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

Форум MySQL

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

 

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

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

тема: Хелп! Поправьте Запросик
 
 автор: dimonich2004   (21.03.2012 в 18:40)   письмо автору
 
 

Есть ТАБЛИЦЫ:
db_color

поля : color_id, color_img, color_name, color_fabr

db_fabriks

поля: fabr_id, fabr_name

а вот запрос:

$qf=mysql_query("SELECT color_id,color_img,color_name,fab_name FROM db_color JOIN db_fabriks USING (color_fabr) ORDER BY color_name");


из второй таблицы Хотел бы получить название из поля fab_name найдя по полю color_fabr (в нем индификатор поля fab_name)

  Ответить  
 
 автор: Valick   (21.03.2012 в 19:25)   письмо автору
 
   для: dimonich2004   (21.03.2012 в 18:40)
 

USING (color_fabr)
применяется только если имена полей в обеих таблицах одинаковые

  Ответить  
 
 автор: dimonich2004   (21.03.2012 в 19:41)   письмо автору
 
   для: Valick   (21.03.2012 в 19:25)
 

а если разные что применить?

  Ответить  
 
 автор: Valick   (21.03.2012 в 20:24)   письмо автору
 
   для: dimonich2004   (21.03.2012 в 19:41)
 

ON color_fabr=fab_name
надеюсь значений через запятую там нет

  Ответить  
 
 автор: dimonich2004   (21.03.2012 в 20:28)   письмо автору
 
   для: Valick   (21.03.2012 в 20:24)
 

нет!

А вот каке записать это Подскажите плз...

  Ответить  
 
 автор: Valick   (21.03.2012 в 20:40)   письмо автору
 
   для: dimonich2004   (21.03.2012 в 20:28)
 

$qf=mysql_query("SELECT color_id,color_img,color_name,fab_name FROM db_color JOIN db_fabriks ON color_fabr=fab_name ORDER BY color_name");

только определитесь fabr или fab , а то вы и так и так пишите

  Ответить  
 
 автор: dimonich2004   (21.03.2012 в 20:50)   письмо автору
 
   для: Valick   (21.03.2012 в 20:40)
 

Глухо как в танке ((


<?
$qf
=mysql_query("SELECT color_id,color_img,color_name,fab_name FROM db_color JOIN db_fabriks ON color_fabr=fab_name ORDER BY color_name");
$fq=mysql_fetch_array($qf);
do
{
    
//if(!empty($fq['color_name']))
    //{
        
$ii++;
?>
        <div style="width:32%; float:left; color:#00F; margin:1px; padding:1px; border-style:solid; border-width:1px; border-radius:10px;" align="center"><img src="../FabrColorImg/<? echo $fq['color_img']; ?>" style="float:left;" /><p><? echo $ii.") ".$fq['color_name']." (Текона)".$fq['fab_name']; ?></p></div>
<?
    
//}
}while($fq=mysql_fetch_array($qf));
?>



А правильно я вывожу?
- У меня пусто - нечего не выводит (Ошибок нет - просто пусто)

  Ответить  
 
 автор: Valick   (21.03.2012 в 21:10)   письмо автору
 
   для: dimonich2004   (21.03.2012 в 20:50)
 

сделайте $qf=mysql_query("SELECT color_id,color_img,color_name,fab_name FROM db_color JOIN db_fabriks ON color_fabr=fab_name ORDER BY color_name") or die(mysql_error());

  Ответить  
 
 автор: dimonich2004   (21.03.2012 в 21:14)   письмо автору
 
   для: Valick   (21.03.2012 в 21:10)
 

Пусто

на экране

ошибок нет(((

записи есть

--
-- Table structure for table `db_color`
--

CREATE TABLE IF NOT EXISTS `db_color` (
`color_id` int(11) NOT NULL AUTO_INCREMENT,
`color_name` tinytext NOT NULL,
`color_img` tinytext NOT NULL,
`color_fabr` int(11) NOT NULL,
PRIMARY KEY (`color_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

--
-- Dumping data for table `db_color`
--

INSERT INTO `db_color` (`color_id`, `color_name`, `color_img`, `color_fabr`) VALUES
(1, 'Дуб', '20120321112548_dub.jpg', 2);





--
-- Table structure for table `db_fabriks`
--

CREATE TABLE IF NOT EXISTS `db_fabriks` (
`fab_id` int(11) NOT NULL AUTO_INCREMENT,
`fab_name` tinytext NOT NULL,
`fabr_city` int(11) NOT NULL,
PRIMARY KEY (`fab_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `db_fabriks`
--

INSERT INTO `db_fabriks` (`fab_id`, `fab_name`, `fabr_city`) VALUES
(1, 'Одинцово', 1),
(2, 'Текона', 2),
(3, 'Mario rioli', 3),
(4, 'Доп1', 4);

  Ответить  
 
 автор: Valick   (21.03.2012 в 21:24)   письмо автору
 
   для: dimonich2004   (21.03.2012 в 21:14)
 

ну а теперь посмотрите на таблицы и догадайтесь почему у вас условие ON color_fabr=fab_name ON color_fabr=fab_name ни разу не выполняется :)

  Ответить  
 
 автор: dimonich2004   (21.03.2012 в 21:29)   письмо автору
 
   для: Valick   (21.03.2012 в 21:24)
 

fab_id ?

=))))

  Ответить  
 
 автор: dimonich2004   (21.03.2012 в 21:31)   письмо автору
 
   для: Valick   (21.03.2012 в 21:24)
 

- "Три раза КУ!"

СПАСИБО ОГРОМНОЕ!

Первый раз решил такой запрос сложный сделать и видимо заморочился что не заметил))))

СПАСИБО!

А запросы к 3 или 5ти таблицам тоже с ON делаюццо?

  Ответить  
 
 автор: Valick   (21.03.2012 в 22:13)   письмо автору
 
   для: dimonich2004   (21.03.2012 в 21:31)
 

А запросы к 3 или 5ти таблицам тоже с ON делаюццо?
да, причем ON можно писать несколько раз для каждого JOIN, ну или использовать AND
__
и самое главное, чем быстрее избавитесь от видео курса Попова, тем лучше
вместо do{}while() используйте while(){}, воспользуйтесь поиском по этому форуму в разделе MySQL примеров очень много

  Ответить  
 
 автор: dimonich2004   (29.03.2012 в 13:38)   письмо автору
 
   для: Valick   (21.03.2012 в 22:13)
 

а чем так плох DO в связке с WHILE?

  Ответить  
 
 автор: Valick   (29.03.2012 в 13:58)   письмо автору
 
   для: dimonich2004   (29.03.2012 в 13:38)
 

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

  Ответить  
 
 автор: cheops   (29.03.2012 в 14:33)   письмо автору
 
   для: dimonich2004   (29.03.2012 в 13:38)
 

Тем что он выполнит хотя бы один цикл, хотя задача предполагает, что их может быть 0. Т.е. для такого типа задач специально введен цикл while(). У вас есть пила и лом, вы ломом выкорчевываете дерево, а пилой пилите наледь на дороге. Это все возможно, но выглядит не профессионально.

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

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