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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Сложный запрос к двум таблицам

Сообщения:  [1-5] 

 
 автор: Front   (30.03.2007 в 13:38)   письмо автору
 
   для: Trianon   (30.03.2007 в 13:28)
 

To Trianon: Спасибо, большое.

Да действительно, если писать просто JOIN он выводит только записи где objectid = photoid. А вот при использовании LEFT JOIN вывелись записи которым не соответствовало условие.
В итоге получился такой запрос:

$query = "select * from kvarts left join db_photo on kvarts.objectid = db_photo.photoid where ".implode(" AND ",$where)." order by $sort"; 


Еще раз огромное спасибо! Тема закрыта!

   
 
 автор: Trianon   (30.03.2007 в 13:28)   письмо автору
 
   для: Front   (30.03.2007 в 13:06)
 

попробуйте сделать echo $query перед выполнением, и посмотреть, что за запрос Вы получили в конечном итоге.
Чтобы проветрить на месте - структуры мало. Нужно еще кусочек дампа данных небольшой, и входные поля.

А соответствие строк в базе у Вас есть? Если у квартир нет фото, вы не получите ничего. Тут нужен LEFT JOIN, чтобы цеплять kvarts независимо от того, есть ли соотв db_photo

   
 
 автор: Front   (30.03.2007 в 13:06)   письмо автору
 
   для: Trianon   (30.03.2007 в 12:44)
 

Составил такой запрос:

$query = "select * from kvarts join db_photo on kvarts.objectid = db_photo.photoid where ".implode(" AND ",$where)." order by $sort"; 

Ошибку теперь не выдает, но почему то в результатах поиска ничего нет, переменные передаются, я проверил. В чем проблема, не пойму:
Струкрута таблиц:

kvarts:


CREATE table kvarts (objectid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
mkomn INT(2) NOT NULL,
area TINYTEXT NOT NULL,
address TINYTEXT NOT NULL,
floor TINYTEXT NOT NULL,
sall float(4,1) NOT NULL,    
slive TINYTEXT NOT NULL,
kitchen float(3,1) NOT NULL,
metro TINYTEXT NOT NULL,
phone TINYTEXT NOT NULL,
house TINYTEXT NOT NULL,
wc TINYTEXT NOT NULL,
price DECIMAL(6,3) NOT NULL,
dop TINYTEXT NOT NULL


db_photo:

CREATE table db_photo (photoid INT(11) not null,
photo1_os TINYTEXT NOT NULL,
photo1_b TINYTEXT NOT NULL,
photo2_os TINYTEXT NOT NULL,
photo2_b TINYTEXT NOT NULL,
photo3_os TINYTEXT NOT NULL,
photo3_b TINYTEXT NOT NULL,
photo4_os TINYTEXT NOT NULL,
photo4_b TINYTEXT NOT NULL,
photo5_os TINYTEXT NOT NULL,
photo5_b TINYTEXT NOT NULL,
key photoid (photoid)


У меня всего одно запись в таблице db_photo, когда выгружаешь все записи без передачи параметров, он только эту запись и показывает, а вот как сделать чтобы даже если в таблице kvarts есть objectid а в db_photo нету photoid равный по значению эта запись все равно выводилась?

   
 
 автор: Trianon   (30.03.2007 в 12:44)   письмо автору
 
   для: Front   (30.03.2007 в 12:34)
 

Части sql-запроса должны следовать в определенном порядке.
1. SELECT поля....
2. FROM таблица [JOIN таблица ON условие соединения .... ]
3. WHERE условие отбора
4. GROUP BY поля агрегирования....
5. HAVING условие отбора агрегатов
6. ORDER BY поля порядка...

Пропускать ненужные - можно. Менять местами оставшиеся - нельзя.

У Вас же часть WHERE развалилась на две, причем первая половина попала выше списка таблиц. Так нельзя.

   
 
 автор: Front   (30.03.2007 в 12:34)   письмо автору
 
 

Здравствуйте!

Помогите разобраться с запросом!

Есть форма которая передает данные в обработчик! После этого скрипт обращается к двум таблицам и выгружает записи!
Я составил такой запрос:


include "config.php";

  $where[] = "1=1";
  if(!empty($_POST['objectid'])) $where[] = "objectid = ".$_POST['objectid'];  
  if(!empty($_POST['mkomn'])) $where[] = "mkomn = ".$_POST['mkomn']; 
  if(!empty($_POST['area'])) $where[] = "area like '%".$_POST['area']."%'"; 
  if(!empty($_POST['floor'])) $where[] = "floor rlike '^".$_POST['floor']."/'";
  if(!empty($_POST['sall_min'])) $where[] = "sall >= ".$_POST['sall_min']; 
  if(!empty($_POST['sall_max'])) $where[] = "sall <= ".$_POST['sall_max']; 
  if(!empty($_POST['kitchen_min'])) $where[] = "kitchen >= ".$_POST['kitchen_min']; 
  if(!empty($_POST['kitchen_max'])) $where[] = "kitchen <= ".$_POST['kitchen_max'];  
    if(!empty($_POST['price_min'])) $where[] = "price >= ".$_POST['price_min']; 
  if(!empty($_POST['price_max'])) $where[] = "price <= ".$_POST['price_max']; 
   if(!empty($_POST['metro'])) $where[] = "metro like '%".$_POST['metro']."%'";
   if(!empty($_POST['phone'])) $where[] = "phone like '%".$_POST['phone']."%'";
  if(!empty($_POST['house'])) $where[] = "house like '%".$_POST['house']."%'";
  if(!empty($_POST['wc'])) $where[] = "wc like '%".$_POST['wc']."%'";
  
$query = "SELECT * FROM kvarts WHERE ".implode(" AND ",$where)." AND kvarts join db_photo on kvarts.objectid = db_photo.photoid ORDER by $sort"; 



Но ругается и говорит что проблема в синтаксисе! Подскажите можно ли вообще сделать такой запрос, и если можно то как правильно это реализовать? Заранее спасибо!

   

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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