|
|
|
| Есть ТАБЛИЦЫ:
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) | |
|
|
|
|
|
|
|
для: dimonich2004
(21.03.2012 в 18:40)
| | USING (color_fabr)
применяется только если имена полей в обеих таблицах одинаковые | |
|
|
|
|
|
|
|
для: Valick
(21.03.2012 в 19:25)
| | а если разные что применить? | |
|
|
|
|
|
|
|
для: dimonich2004
(21.03.2012 в 19:41)
| | ON color_fabr=fab_name
надеюсь значений через запятую там нет | |
|
|
|
|
|
|
|
для: Valick
(21.03.2012 в 20:24)
| | нет!
А вот каке записать это Подскажите плз... | |
|
|
|
|
|
|
|
для: 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 , а то вы и так и так пишите | |
|
|
|
|
|
|
|
для: 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));
?>
|
А правильно я вывожу?
- У меня пусто - нечего не выводит (Ошибок нет - просто пусто) | |
|
|
|
|
|
|
|
для: 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()); | |
|
|
|
|
|
|
|
для: 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); | |
|
|
|
|
|
|
|
для: dimonich2004
(21.03.2012 в 21:14)
| | ну а теперь посмотрите на таблицы и догадайтесь почему у вас условие ON color_fabr=fab_name ON color_fabr=fab_name ни разу не выполняется :) | |
|
|
|
|
|
|
|
для: Valick
(21.03.2012 в 21:24)
| | fab_id ?
=)))) | |
|
|
|
|
|
|
|
для: Valick
(21.03.2012 в 21:24)
| | - "Три раза КУ!"
СПАСИБО ОГРОМНОЕ!
Первый раз решил такой запрос сложный сделать и видимо заморочился что не заметил))))
СПАСИБО!
А запросы к 3 или 5ти таблицам тоже с ON делаюццо? | |
|
|
|
|
|
|
|
для: dimonich2004
(21.03.2012 в 21:31)
| | А запросы к 3 или 5ти таблицам тоже с ON делаюццо?
да, причем ON можно писать несколько раз для каждого JOIN, ну или использовать AND
__
и самое главное, чем быстрее избавитесь от видео курса Попова, тем лучше
вместо do{}while() используйте while(){}, воспользуйтесь поиском по этому форуму в разделе MySQL примеров очень много | |
|
|
|
|
|
|
|
для: Valick
(21.03.2012 в 22:13)
| | а чем так плох DO в связке с WHILE? | |
|
|
|
|
|
|
|
для: dimonich2004
(29.03.2012 в 13:38)
| | просто не по назначению используется
если вам нужно забить гвоздь вы возьмете молоток или черствый батон?
do while используется там где условие определяется не ранее чем после хотя бы одной итерации цикла, в нашем случае все известно и до начала цикла.
и иногда можно получить ошибку или нотайс. если запрос вернется пустым | |
|
|
|
|
|
|
|
для: dimonich2004
(29.03.2012 в 13:38)
| | Тем что он выполнит хотя бы один цикл, хотя задача предполагает, что их может быть 0. Т.е. для такого типа задач специально введен цикл while(). У вас есть пила и лом, вы ломом выкорчевываете дерево, а пилой пилите наледь на дороге. Это все возможно, но выглядит не профессионально. | |
|
|
|