несколько запроса в один!

Kostya\spb

Новичок
несколько запроса в один!

Допустим есть база чегото!

Три таблицы!
Первая(firms):
id | firma
Вторая(models):
id | firma_id | model
Третья(info):
id | firma_id | model_id | cena | col | nalich

если например firm.php?id=1
<название_фирмы_id1>
<список_моделей_этой_фирмы>
делаю так:
$query=mysql_query("SELECT * FROM firms WHERE id=$id");
$firm=mysql_fetch_array($query);
echo "$firm[firma]";
$query=mysql_query("SELECT * FROM models WHERE firma_id=$id");
while($model=mysql_fetch_array($query)) { echo "$model[model] }

если например model.php?id=3
<название_фирмы_id1> - <название_модели_id3>
<все_описание_об_этой_модели>
здесь тоже запутно!
сначало надо узнать название фирмы(из первой таблицы) потом модели(из второй) и потом все ее описание(из третей)
уж очень много получается!
Я канешно понимаю что все очень жутко выглядит, поэтому и прошу вас помочь все уменьшить и сделать как можно проще!
 

Demiurg

Guest
А чего запутаного тоже 2 запроса, вполне нормально.
 

Demiurg

Guest
Лучшее враг хорошего.
Оптимизировать надо не там, где можно, а там, где надо. Для mysql пара простеньких запросов - не проблема.
 

Kostya\spb

Новичок
Автор оригинала: Demiurg
Лучшее враг хорошего.
Оптимизировать надо не там, где можно, а там, где надо. Для mysql пара простеньких запросов - не проблема.
Значит лучше так оставить?
 

voland

Guest
Можно кончено объеденить JOIN, но толку от этого вроде небудет...
З.Ы. По скорости работы к сожалению не знаю.
 

Kostya\spb

Новичок
А подскажите тогда, как из одной таблицы вытощить название фирмы а из другой общее количество все ее моделей?
там через count(*)
только чото неполучается
 

Demiurg

Guest
select firms.firma , count(models.id) from firms left join models on models.firma_id = firms.id group by firms.id
 

voland

Guest
SELECT count(firms.id) , firms.firma FROM firms
LEFT JOIN models ON firms.id = models.firma_id
WHERE models.firma_id ='$id' GROUP BY firms.id
Я бы сказал, что можно так...

-~{}~ 27.08.04 10:11:

Ну вот на минуту опоздал... :(
 

Kostya\spb

Новичок
Спасибо! Пойду пробывать!

-~{}~ 28.08.04 18:16:

А помогите сделать вот это!

Первая(firms):
id | firma
1 | название_фирмы
2 | название_фирмы

Вторая(models):
id | firma_id | model
1 | 0 | название_модели
2 | 2 | название_модели
3 | 1 | название_модели

Как мне вот именно из таких таблиц вытащить:
Название модели, если ид фирмы в этой таблице равно 0 то написать Неизвестно (хз - $models[model]), а если известно то написать ее фирму ($models[fimra] - $models[model])

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

alpes

Весь мир на ладони
самая простая подсказка: создай в таб. firms запись 0 | Неизвестно
по сложнее: используй конструкцию LEFT JOIN
 

Kostya\spb

Новичок
Автор оригинала: alpes
самая простая подсказка: создай в таб. firms запись 0 | Неизвестно
по сложнее: используй конструкцию LEFT JOIN
Лучше LEFT JOIN, но я щас сижу пытаюсь сделать но все как-то неполучается!

-~{}~ 29.08.04 10:53:

Ну народ помогите кто-нить! выручите!
 

alpes

Весь мир на ладони
[sql]SELECT models.model, IFNULL( firms.firma, 'Неизвестно' ) AS fname
FROM models
LEFT JOIN firms ON models.firma_id = firms.id[/sql]
а что самому помешало разобраться?
 

Kostya\spb

Новичок
Я пока еще только изучаю мускуль и еще недошо до IF, точнее я знаю что такое IF но незнаю где и как его применять в запросах!
Но спасибо за помощь! пойду пробывать

-~{}~ 29.08.04 13:23:

Автор оригинала: alpes
[sql]SELECT models.model, IFNULL( firms.firma, 'Неизвестно' ) AS fname
FROM models
LEFT JOIN firms ON models.firma_id = firms.id[/sql]
Может я ошибаюсь, но это что-то неработает
Если я правелно почитал IF то у тебя сверяет если название фирмы неравно 0 то он его выведет, а если равно то выведет 'Неизвестно', но в названии только буквы обычно. Мне надо сверить его с id в таблицы models
Может надо так?
IF(models.firma_id<>0,firms.firma'Неизвестно' ) AS fname
А как теперь определить какую надо вывести firms.firma
 

alpes

Весь мир на ладони
что не рабоает? какую фирму определять?
разберись что, как и почему работает, пример не сложный
а иначе у тебя все не будет работать
что не ясно будет - спрашивай
насчет нуля, хочешь можешь проверять на ноль, но так как есть более правильно, т.к. будет "Неизвестно" не только на firma_id=0 но и на ту фирму которой не окажется в firms
 

alpes

Весь мир на ладони
прогрес :D
а теперь разберись что будет если выполнишь без WHERE models.id='$id' и чем отличаются результаты
 

Kostya\spb

Новичок
Вроде так:
Если без WHERE то он просто берет первую строку из таблицы models
 

alpes

Весь мир на ладони
ниче подобного. с WHERE models.id='$id' ты накладываешь ограничение на выборку, а без выбираешь все записи из моделс
 

Kostya\spb

Новичок
Ну да. Только если без цикла выводить а просто сделать
$models=mysql_fetch_array($query);
то он возмет первую строку. А если с WHERE то определенную.
Ну а если с циклом то да он сделает как ты сказал.

Но здесь зачем выводить через цикл если нужна только одна строка!
 
Сверху