Вы также можете реализовать 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 (); }}}
используйте 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
Это должно работать:
count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, NULL))
count()
проверяет, существует ли это значение или нет. 0 эквивалентно существующему значению, поэтому он подсчитывает еще один, а NULL - как несуществующее значение, поэтому не учитывается.
Заменить эту строку:
count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, 0)) AS comments
С помощью этого:
coalesce(sum(ccc_news_comments.id = 'approved'), 0) comments
COALESCE
возвращает сумму? Любая ссылка в MySQL doc?
– Istiaque Ahmed
10 November 2017 в 11:41
Лучше все еще (или в любом случае короче):
SUM(ccc_news_comments.id = 'approved')
Это работает, поскольку логический тип в MySQL представлен как INT
0
и 1
, как и в C. (май но не переносимы через системы БД.)
Что касается COALESCE()
, как упоминалось в других ответах, многие языковые API автоматически извлекают NULL
в ''
при получении значения. Например, с интерфейсом PHP mysqli
было бы безопасно запускать ваш запрос без COALESCE()
.
null
, когдаCOUNT
(без условий) вернется0
. КогдаCOUNT
вернет ничего , но i> 0, ноSUM
делает i> возвращает 0, трюк возвращает0
. – Robin Kanters 9 November 2013 в 18:36num_relevant_parts
-SUM
с условиями,num_total_parts
-COUNT(parts.id)
(извините за двойной комментарий, было слишком поздно для редактирования) – Robin Kanters 9 November 2013 в 18:41