SQL select with count () [duplicate]

Вы также можете реализовать ISerializable и использовать SerializationInfo для ручного управления содержимым вашего растрового изображения.

EDIT: João прав: Правильный путь для обработки сериализации XML заключается в реализации IXmlSerializable , а не ISerializable :

  public class MyImage: IXmlSerializable {public string Name {get;  задавать;  } public Bitmap Image {get;  задавать;  } public System.Xml.Schema.XmlSchema GetSchema () {throw new NotImplementedException ();  } public void ReadXml (System.Xml.XmlReader reader) {throw new NotImplementedException ();  } public void WriteXml (System.Xml.XmlWriter writer) {writer.WriteStartElement («Имя»);  writer.WriteString (this.Name);  writer.WriteEndElement ();  используя (MemoryStream ms = новый MemoryStream ()) {this.Image.Save (ms, ImageFormat.Bmp);  byte [] bitmapData = ms.ToArray ();  writer.WriteStartElement ( "Изображение");  writer.WriteBase64 (bitmapData, 0, bitmapData.Length);  writer.WriteEndElement ();  }}}  
79
задан user1163513 22 March 2012 в 03:27
поделиться

4 ответа

используйте sum() вместо count()

Попробуйте ниже:

SELECT ccc_news . * , 
SUM(if(ccc_news_comments.id = 'approved', 1, 0)) AS comments
FROM ccc_news
LEFT JOIN ccc_news_comments ON ccc_news_comments.news_id = ccc_news.news_id
WHERE `ccc_news`.`category` = 'news_layer2'
AND `ccc_news`.`status` = 'Active'
GROUP BY ccc_news.news_id
ORDER BY ccc_news.set_order ASC
LIMIT 20 
203
ответ дан user 15 August 2018 в 14:37
поделиться
  • 1
    Спасибо, он просто решил проблему для меня. Спасибо большое ..... – user1163513 21 March 2012 в 07:18
  • 2
    Вы должны принять ответ, который помог вам meta.stackexchange.com/questions/5234/… – user 21 March 2012 в 07:19
  • 3
    Или даже SUM (ccc_news_comments.id = 'approved)) как трюк, специфичный для MySQL – mojuba 21 January 2013 в 22:44
  • 4
    @mojuba не на 100%, твой трюк возвращает null, когда COUNT (без условий) вернется 0. Когда COUNT вернет ничего , но 0, но SUM делает возвращает 0, трюк возвращает 0. – Robin Kanters 9 November 2013 в 18:36
  • 5
    @mojuba случай и точка . num_relevant_parts - SUM с условиями, num_total_parts - COUNT(parts.id) (извините за двойной комментарий, было слишком поздно для редактирования) – Robin Kanters 9 November 2013 в 18:41

Это должно работать:

count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, NULL))

count() проверяет, существует ли это значение или нет. 0 эквивалентно существующему значению, поэтому он подсчитывает еще один, а NULL - как несуществующее значение, поэтому не учитывается.

14
ответ дан Alexis Pigeon 15 August 2018 в 14:37
поделиться
  • 1
    Я думаю, что count более интуитивно понятен, чем sum в этом случае. – Jeffery 31 July 2017 в 02:40

Заменить эту строку:

count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, 0)) AS comments

С помощью этого:

coalesce(sum(ccc_news_comments.id = 'approved'), 0) comments
1
ответ дан Mosty Mostacho 15 August 2018 в 14:37
поделиться
  • 1
    count (if (ccc_news_comments.id = 'approved', ccc_news_comments.id, 0)) ??? что будет означать использование суммы, если вы используете ccc_news_comments.id – user 21 March 2012 в 07:17
  • 2
    Извини, что ты имеешь ввиду? Логическое значение становится равным 0 или 1, затем суммой, и в случае, если существует некоторое значение null, сливающееся с 0 – Mosty Mostacho 21 March 2012 в 07:19
  • 3
    Совместный трюк действительно классный! – rewritten 29 January 2013 в 16:05
  • 4
    @MostyMostacho, COALESCE возвращает сумму? Любая ссылка в MySQL doc? – Istiaque Ahmed 10 November 2017 в 11:41
  • 5
    Да, почему бы и нет? В документах есть много ссылок: dev.mysql.com/doc/refman/5.7/en/… – Mosty Mostacho 10 November 2017 в 15:43

Лучше все еще (или в любом случае короче):

SUM(ccc_news_comments.id = 'approved')

Это работает, поскольку логический тип в MySQL представлен как INT 0 и 1, как и в C. (май но не переносимы через системы БД.)

Что касается COALESCE(), как упоминалось в других ответах, многие языковые API автоматически извлекают NULL в '' при получении значения. Например, с интерфейсом PHP mysqli было бы безопасно запускать ваш запрос без COALESCE().

46
ответ дан potashin 15 August 2018 в 14:37
поделиться
  • 1
    Это делает значительно более читаемый код sql. Красивое решение. – Dag Sondre Hansen 19 January 2015 в 13:25
Другие вопросы по тегам:

Похожие вопросы: