Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Объединение запросов для возможной сортировки


Автор: letsgo 17.2.2009, 21:56
Добрый вечер.
Прошу помощи в решении следующей проблемы.

Есть две таблицы:

table1 (id,name)

table2 (id,idtable1,name)

Мне необходимо выбрать из таблицы table1 все строки и сосчитать сколько раз значение table1.id встречается в table2

Сейчас я делаю это с помощью двух запросов

Код

$result = mysql_query("SELECT * FROM `table1`");
while ($row = mysql_fetch_array($result)) :
$res1 = mysql_query("SELECT * FROM `table2` WHERE `idtable1` = '$row[0]'");
$all = mysql_num_rows($res1);
echo "$row[1] $all<BR>";
endwhile;


Понимаю, что вроде бы можно и в один запрос можно, но все руки не доходили, а сейчас потребовалось делать сортировку вывода, как раз, по значению $all.

В общем, прошу помощи...
Заранее всем спасибо.

Автор: Akina 17.2.2009, 22:16
Код

select table1.id, count(table2.id)
from table1
left join table2
on table1.id=table2.idtable1

Автор: skyboy 17.2.2009, 22:18
Код

SELECT table1.id, count(table2.idtable1)
FROM table1
LEFT JOIN table2
ON table2.idtable1 = table1.id
GROUP BY table1.id

Автор: letsgo 17.2.2009, 22:49
А как сортировать вывод результатов, либо по увеличению, либо по уменьшению count(table2.id))

Автор: Kbl4AH 17.2.2009, 23:09
Код

order by 2 [desc]
 ?

Автор: Akina 17.2.2009, 23:10
Добавить order by

Автор: letsgo 17.2.2009, 23:59
Я так понимаю, что, если требуется сделать выборку еще из одной таблицы, то простым добавлением имени таблицы после FROM не отделаешься?

Автор: Kbl4AH 18.2.2009, 08:07
Цитата(letsgo @  17.2.2009,  23:59 Найти цитируемый пост)
Я так понимаю, что, если требуется сделать выборку еще из одной таблицы, то простым добавлением имени таблицы после FROM не отделаешься?

От ситуации зависит...

Автор: letsgo 21.2.2009, 16:16
Скажу честно, очень долго пытался составить запрос самостоятельно - не получается никак.
Думал из примера про две таблицы, из трех таблиц как-нибудь составлю самостоятельно :(

К сожалению, ошибался.
Если кому не сложно, буду несказанно рад помощи.

Итак, есть три таблицы:

- table1
- table2
- table3

Как и в первом посте из первых двух таблиц я выбираю значения, которые соответствуют заданным параметрам:
Код

SELECT * FROM `table1`,`users`
                        WHERE `table2`.`col1` = '$_GET[$x]'
                        AND `table2`.`col2` = `table2`.`col1`
                        AND `table2`.`col3` = 'y' ORDER BY.....");


Дальше с помощью цикла
Код

while ($row = mysql_fetch_array($result)) :

Я вытаскиваю нужные мне данные и делаю еще один запрос к базе из таблицы 3 (table3)

Код

SELECT * FROM `table`
                                WHERE `col1` = '$_GET[$x]'
                                AND `col2` = '$row[`table2`.`col1`]'

Второй запрос нужен только для подсчета 
т.е. выводится он:
echo mysql_num_rows($result1)

Понимаю, что возможно слишком много хочу, но буду очень благодарен, даже не за решение, а за путь к нему smile

Автор: Gluttton 23.2.2009, 13:45
Поставте задачу в общем виде. Т.е. даны таблицы такие-то, калонки такие-то, на выходе нужно то-то,  так же как и в первом посте, только для трех таблиц.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)