Запрос с JOIN в три таблицы: помогите составить!

Статус
В этой теме нельзя размещать новые ответы.

Albert22

Старатель
Регистрация
30 Мар 2008
Сообщения
270
Реакции
11
Привет
Замучался составлять запрос.
Есть три интересующих поля: events.city, places.city, users.location соответственно из таблиц events, places и users.
Нужно выбрать все города, название которых начинается на заданные буквы. Это для автозаполнения.
Нашёл хорошую статью: Для просмотра ссылки Войди или Зарегистрируйся
По примеру попытался составить следующий запрос, для начала затрагивающий две таблицы (три я не осилил:(
Код:
$query = mysql_query("SELECT DISTINCT `places`.`city`,`events`.`city` FROM `places` FULL OUTER JOIN `events` ON `places`.`city`=`events`.`city` WHERE `places`.`city` LIKE '".$value."%' OR `events`.`city` LIKE '".$value."%' LIMIT 10");
Выдаёт ошибку
У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около 'OUTER JOIN `events` ON `places`.`city`=`events`.`city` WHERE `places`.`city` LIK' на строке 1
Warning: mysql_fetch_array(:( supplied argument is not a valid MySQL result resource in и т.д.
Пробовал разные комбинации — скорее всего что-то делаю неправильно.
Укажите, пожалуйста, что именно?
 
По ссылке самый бональный пример джоинов - можно найти и на русском языке описание и более расширенное

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

Например:
- в таблице users есть строка где location=Керчь
- в таблице events есть несколько строк где city=Киев
- в таблице places есть строка где city=Кировоград
Необходимо:
чтобы скрипт, получив введенную посетителем букву «к» посредством регистронезависимого поиска вернул массив
Код:
Array([0]=>'Керчь', [1]=>'Киев', [2]=>'Кировоград')
 
вообще-то стоило начать с изучения "нормализации данных".
но если требуется быстрое решение и прямо сейчас, то:
Код:
SELECT `city` FROM places WHERE `city` LIKE '".$value."%'
UNION
SELECT `city` FROM events WHERE `city` LIKE '".$value."%'
UNION
SELECT `location` FROM users WHERE `location` LIKE '".$value."%'
DISTINCT не потребуется, т.к. при UNION он автоматически применяется.
 
Код:
select Field,'',''  from Tab1 where Field like ...
union
select '',Field ,'' from  Tab2 where Field like ...
union
select '','',Field from Tab3 where Field like ...
 
вообще-то стоило начать с изучения "нормализации данных".
но если требуется быстрое решение и прямо сейчас, то: ...
Спасибо, про нормализацию погуглю, оперативное решение работает.
Насколько я понимаю, его быстродействие уступает JOINу?
 
Нет, не уступает и даже наоборот.
При достаточно большом кол-ве пользователей тот запрос с JOIN'ом будет вешать сервак напрочь.
 
Join актуален при использовании реляционной БД, в твоем случае лучше union.
 
Спасибо за помощь.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху