|
Выборка по двум таблицам
|
|||
---|---|---|---|
#18+
Помогите сделать выборку по двум таблицам, необходимо отобразить новости по количеству комментариев, т.е. новости с наибольшим кол-вом комментариев должны отображаться в начале списка . Имеются таблицы: 1. News (id, title, date) - таблица с новостями 2. Comments (id, material_id, text, date) - таблица с комментариями, где material_id - это уникальный id новости из таблицы news Новости по дате вывожу следующим sql запросом: SELECT * FROM news WHERE date <= NOW() order by date desc LIMIT 0, 20 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 15:33 |
|
Выборка по двум таблицам
|
|||
---|---|---|---|
#18+
zhenia3003, 1) Что мешает использовать подсветку синтаксиса, размещая сообщение? 2) Что мешает не использовать служебные слова и называть поля БД разумно достаточно, например: Код: sql 1. 2. 3. 4.
И т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2020, 21:40 |
|
Выборка по двум таблицам
|
|||
---|---|---|---|
#18+
zhenia3003 Помогите сделать выборку по двум таблицам, необходимо отобразить новости по количеству комментариев, т.е. новости с наибольшим кол-вом комментариев должны отображаться в начале списка . Имеются таблицы: 1. News (id, title, date) - таблица с новостями 2. Comments (id, material_id, text, date) - таблица с комментариями, где material_id - это уникальный id новости из таблицы news Новости по дате вывожу следующим sql запросом: SELECT * FROM news WHERE date <= NOW() order by date desc LIMIT 0, 20 Код: plsql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 15:40 |
|
Выборка по двум таблицам
|
|||
---|---|---|---|
#18+
Gluck99 zhenia3003, 1) Что мешает использовать подсветку синтаксиса, размещая сообщение? 2) Что мешает не использовать служебные слова и называть поля БД разумно достаточно, например: Код: sql 1. 2. 3. 4.
И т.д. по поводу второго не согласен имя таблицы достаточно описывает что внутри. для остального есть алиасы. Я предпочитаю стандартные name, description вместо tableName_name etc ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 15:43 |
|
Выборка по двум таблицам
|
|||
---|---|---|---|
#18+
artas имя таблицы достаточно описывает что внутри. для остального есть алиасы. Я предпочитаю стандартные name, description вместо tableName_name etc Код: sql 1.
занятие а-ля "дурная голова ногам покоя не даёт". В-третьих, читабельность кода повышается, если по имени поля сразу видно его принадлежность. И повторение имени таблицы в начале - это частный случай. Это необязательно так. В-четвертых, отладка больших запросов упрощается, потому что когда у вас 10 таблиц, и в каждой присутствует поле 'Name' и поле 'Date', риск получить неуловимую ошибку увеличивается. Всего этого можно избежать, если использовать исчерпывающий и продуманный нейминг. Вообще, правильный нейминг снимает кучу проблем и сильно увеличивает производительность, снимает проблемы при сопровождении и т.д. Must read: Стив Макконнелл - "Совершенный код". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 17:52 |
|
Выборка по двум таблицам
|
|||
---|---|---|---|
#18+
Gluck99 artas имя таблицы достаточно описывает что внутри. для остального есть алиасы. Я предпочитаю стандартные name, description вместо tableName_name etc Код: sql 1.
занятие а-ля "дурная голова ногам покоя не даёт". В-третьих, читабельность кода повышается, если по имени поля сразу видно его принадлежность. И повторение имени таблицы в начале - это частный случай. Это необязательно так. В-четвертых, отладка больших запросов упрощается, потому что когда у вас 10 таблиц, и в каждой присутствует поле 'Name' и поле 'Date', риск получить неуловимую ошибку увеличивается. Всего этого можно избежать, если использовать исчерпывающий и продуманный нейминг. Вообще, правильный нейминг снимает кучу проблем и сильно увеличивает производительность, снимает проблемы при сопровождении и т.д. Must read: Стив Макконнелл - "Совершенный код". 1+3) Алиасы дают ту же читабельность кода на клиенте dicName.title 2) Как минимум в энтерпрайзе это неактуально по причине обязательности ORM, там же где нужен нативный SQL, будет всякая аналитика и тд, в любом случае будет sum(),avg() etc() as smth 4) смотрите пункт 1. Это заставляет разработчика обращатся к таблицам через алиас, тем самым вырабатывая хороший тон, это лучше чем опиратся на безалиасное абстрактное название , при добавлении аналогичного в другую таблицу, все запросы перестанут работать. + для похожих справочников, есть возвожность обращатся полиморфно, а ля select id,name from TABLE_NAME Книга хорошая, но неиспользование алиасов в запросе на 10 таблиц хуже чем "неправильный", по вашему мнению, нейминг P.S. Поля для soft delete тоже предлагаете назвать с именем таблицы ? is_deleted vs is_news_deleted ? is_deleted vs is_category_news_deleted ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2020, 11:53 |
|
Выборка по двум таблицам
|
|||
---|---|---|---|
#18+
artas Книга хорошая, но неиспользование алиасов в запросе на 10 таблиц хуже чем "неправильный", по вашему мнению, нейминг Алиасы для таблиц обычно имеют короткие названия, одно-двух-трех буквенные сокращения от полного имени таблицы. Когда у вас в запросе собирается много данных, например, сложный составной справочник из 20-ти таблиц, у вас алиасы могут иметь вид: Код: sql 1.
На следующий день вы уже забудете что какой алиас значит и будете бегать по коду глазами, чтобы понять, какое поле к какой таблице относится. Можно, конечно, алиасы сделать более читабельными, но тогда они будут длинными, и всё преимущество алиасов будет сведено на нет. Это первое. И второе. В конечном итоге все эти Name'ы надо будет 20 раз прописывать через Name AS MyNewName, т.к. независимо от того, используете вы алиасы для таблиц или нет, в результирующем наборе все одинаково названные поля будут синонимами, и вы либо получите ошибку, либо набор полей с говорящими именами Name1, Name2, Name3 и т.д. Зачем так делать, если можно указать уникальное имя поля сразу в CREATE и забыть об алиасах для полей, оставив их для вычисляемых выражений и ID? Поэтому корректно моё утверждение звучит так: использование алиасов и правильный нейминг лучше, чем использование алиасов и непродуманный нейминг. авторP.S. Поля для soft delete тоже предлагаете назвать с именем таблицы ? is_deleted vs is_news_deleted ? is_deleted vs is_category_news_deletedПожалуй, тут вы правы, вспомогательные булевы поля являются исключением, я их, в основном, оставляю как есть: Deleted, IsInSomething, etc. Но такие поля обычно не участвуют в больших выборках, где надо в результирующем SELECT собирать 10 полей Deleted (это какая-то специфическая задача). Они обычно сидят в WHERE или JOIN ON. Но если булево поле не вспомогательное и пересекается с другими подобными полями, его имеет смысл именовать расширенным образом. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2020, 13:04 |
|
|
start [/forum/topic.php?fid=47&fpage=21&tid=1828588]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 168ms |
0 / 0 |