[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Война с объединением таблиц
m4a1fox
Доброго времени суток всем. Сегодня уже второй раз пишу про объединение так что не судите строго. Отдельно спасибо linker. ЗА его запрос
SELECT `data`.`id`, `data`.`title`, `data`.`date_now`, `menu`.`menu_name` FROM `data`
LEFT JOIN `menu` ON `menu`.`id` = `data`.`id_menu`
ORDER BY `data`.`date_now` DESC
. На его основе составил еще один запросик, который выводик кол-во комментариев к статье. Вот собственно и он
$res = mysql_query("SELECT `you_mail`.`id`, `you_mail`.`title`, `you_mail`.`date_now`, `you_mail`.`text`, `you_mail`.`time`, `you_mail`.`view`, `comment`.`id_mail` "
. "FROM `you_mail` "
. "LEFT JOIN `comment` ON `you_mail`.`id` = `comment`.`id_mail` "
. "WHERE `you_mail`.`hide`='show' ORDER BY `you_mail`.`date` DESC");
Работает нормально, но только мне необходирмо подсчитать кол-во комментариев к статье(id)(таблица - you_mail) - а комментарии к статьям(id_mail)(таблица - comment). Знаю что есть такая штука как COUNT. Только куда ее - то написать надо что бы сработало - не вкурсе. Так что кто может, прошу о помощи. Спасибо!



Спустя 47 минут, 25 секунд (23.12.2010 - 00:24) Invis1ble написал(а):
Во-первых, когда ты уже научишься оформлять код читабельно? Сравни оформление запроса, который тебе дал linker и свой запрос...
Что за ужас - все в одну строку?

Спустя 4 минуты, 7 секунд (23.12.2010 - 00:28) inpost написал(а):
http://inpost.dp.ua/lessons/lessons.php?id=5 - правило№6, смотри.

Спустя 16 секунд (23.12.2010 - 00:28) m4a1fox написал(а):

"SELECT `you_mail`.`id`, `you_mail`.`title`,
`you_mail`.`date_now`, `you_mail`.`text`, `you_mail`.`time`, `you_mail`.`view`, `comment`.`id_mail` FROM `you_mail`
LEFT JOIN `comment` ON `you_mail`.`id` = `comment`.`id_mail`
WHERE `you_mail`.`hide`='show'
ORDER BY `you_mail`.`date` DESC"
;
да извините... не думал совсем про это.

Спустя 7 минут, 35 секунд (23.12.2010 - 00:36) m4a1fox написал(а):
inpost
Хм....да я вроде переменные не использую)

Спустя 22 минуты, 2 секунды (23.12.2010 - 00:58) inpost написал(а):
m4a1fox
Я имел ввиду правило№5 =) Там про стиль =)

Спустя 1 минута, 13 секунд (23.12.2010 - 00:59) m4a1fox написал(а):
inpost
а.... ясно спасибо... я уже в избранное добавил)

Спустя 8 часов, 28 минут, 4 секунды (23.12.2010 - 09:27) linker написал(а):
COUNT() добавляется в SELECT

Спустя 28 минут, 37 секунд (23.12.2010 - 09:56) elliot написал(а):
В компании, где я работаю, мы решили придерживаться нескольких простых правил по оформлению SQL запросов, которые значительно повышают читаемость этих самых запросов:
  • Ключевые слова MySQL пишутся в верхнем регистре (SELECT, FROM и т.д.).
  • Существуют базовые блоки, такие как SELECT, FROM, WHERE, GROUP BY, ORDER BY и другие. Если базовый блок имеет вложенные блоки, то они оформляются с новой строки с использование табуляции.
  • Пользуемся сокращениями (alias) для таблиц.

Пример форматирования:

SELECT
column1,
column2,
.......

FROM table1 AS t1
JOIN table2 AS t2 ON t1.id = t2.key
JOIN
table3 AS t3 ON t1.id = t3.key
...................................
WHERE t1.column2 IS NOT NULL
AND
t1.column1 = 'something'
GROUP BY t1.column2
ORDER BY t1.column2


В отформатированном таким образом запросе куда проще выделить логические блоки:

SELECT
COUNT(*),
ym.id,
ym.title,
ym.date_now,
ym.text,
ym.time,
ym.view,
c.id_mail
FROM you_mail AS ym
LEFT JOIN comment AS c ON ym.id = c.id_mail
WHERE ym.hide = 'show'
ORDER BY ym.date DESC


Запрос небольшой, при больших запросах очень легко запутаться во вложенности, такой подход позволяет этого избежать.

Также запросы, занимающие несколько строк лучше выносить в отдельную переменную, а не лепить непосредственно в параметры функции:

$query = "
SELECT ...
WHERE ....
....
"
;

$res = mysql_query($query);


Такой подход также упрощает чтение и понимание чужого (да и своего через несколько месяцев) кода.

Надеюсь эта информация кому-то окажется полезной ;)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.