Каков лучший синтаксический анализатор XML для Perl?

Мне очень, очень не нравится публиковать ответы, которые я не проверял, но ради прогресса этого вопроса я сделаю удар.

"SELECT
  a.id, a.feed, a.phone, a.time_stamp,
  b.username,
  c.imagenamesized,
  COUNT(d.id) AS likes
FROM user_feeds a
INNER JOIN user_credentials b ON a.phone = b.phone
INNER JOIN profile_pic c ON a.phone = c.phone
LEFT JOIN user_feed_likes d ON a.id = d.feed_id
WHERE a.phone IN ('" . implode("',', $contact_owned) . "')
GROUP BY a.id
ORDER BY a.time_stamp DESC
LIMIT $offset, $limit"

Поскольку user_feed_likes может содержать ноль «лайков» для конкретного feed_id, a LEFT JOIN является правильным JOIN. Ваш синтаксис LEFT JOIN должен отражать ваши INNER JOIN с.

Используя GROUP BY, вы генерируете совокупные данные, с которыми COUNT() могут с удовольствием работать.

Чтобы сделать ваш запрос короче и потенциально легче читать, я рекомендую использовать псевдонимы таблиц (a, b, c, d). При объявлении псевдонимов вы можете написать ключевое слово AS перед псевдонимом как синтаксический сахар, но я думаю, что более распространенным является его опускание.

Ваши $from и $to являются плохим выбором для имен переменных, потому что это не буквально данные, которые они хранят. $from не страшно, но $to потенциально вводит в заблуждение будущих читателей вашего кода. Вот почему я изменил его в своем фрагменте.

В соответствии с рекомендациями, вы всегда должны писать ключевые слова mysql во всех заглавных буквах для удобства чтения.

В соответствии с передовой практикой следует избегать использования * в предложении SELECT. Извлекайте данные только из тех столбцов, которые вы собираетесь использовать. Это позволит вам зациклить результирующий набор и просто вставить полный $row в $respond, не называя каждый столбец явным образом [key].

Вы должны снова прочесать свой скрипт и убедиться, что вы последовательно используете объектно-ориентированный синтаксис mysqli. Смешивание процедурного и объектно-ориентированного не является лучшей практикой. Я предпочитаю объектно-ориентированный, потому что он более лаконичен.

Если вы не знаете, $result может быть повторен непосредственно с foreach() без вызова fetch_assoc().

Избегайте объявления одноразовых переменных. Если вы просто помещаете данные в другой массив, сделайте это без промежуточных переменных.

Я не знаю, исходит ли ваш массив $contact_owned (рассмотрите возможность переименования этой переменной, чтобы лучше описать содержащиеся в ней данные. Например, $user_phone_numbers) из пользовательской отправки, но если это из формы представление или другой ненадежный источник, тогда вы ДОЛЖНЫ реализовать подготовленное заявление о безопасности и стабильности. См. Этот пост, в котором говорится о построении подготовленного оператора с переменным числом заполнителей: https://stackoverflow.com/a/52323556/2943403

Если $contact_owned получено из В предыдущем запросе к базе данных было бы более прямым сократить общее количество поездок в базу данных и просто написать логику WHERE, чтобы отфильтровать необходимые телефонные номера пользователей, используя идентификатор пользователя или что-то вместо вашей текущей логики IN. Это может даже позволить вам избежать сложного синтаксиса подготовленных операторов.

32
задан brian d foy 28 January 2009 в 17:20
поделиться

5 ответов

Я думаю, что Вы используете довольно хороший. XML:: LibXML, Матовый Сержант и интерфейс Perl Christian Glahn к libxml2 Daniel Velliard являются одним из быстрее Синтаксические анализаторы XML, о которых я знаю.

24
ответ дан 27 November 2019 в 20:38
поделиться

Если Вам нужны скорость, питание или функции, XML:: LibXML является способом пойти. Если Вы после простоты использования, тем не менее, XML:: Простой жизнеспособная альтернатива.

10
ответ дан 27 November 2019 в 20:38
поделиться

По моему опыту, XML:: Простой является лучшим для быстрого и грязного парсинга XML. Мы используем его для парсинга данных от третьих лиц, которые не всегда соответствуют стандарту XML. XML:: Простые броски информативные ошибки и получают Вас выполнение чрезвычайно быстро.

5
ответ дан 27 November 2019 в 20:38
поделиться

Вы могли также посмотреть на XML:: Либеральный, который использует LibXML внизу.

2
ответ дан 27 November 2019 в 20:38
поделиться

Это действительно зависит от ваших потребностей, как говорят люди. Для анализа XML-файлов размером ~ 100 МБ (аннотации генов из TAIR , 1 файл на хромосому) я использовал модуль mirod XML :: Twig , который позволяет вам устанавливать обратные вызовы для анализа элементы, которые вас интересуют, представляя каждый субдокумент в виде дерева XML :: Simple. Он сочетает в себе преимущества парсера SAX (сканирование файла как потока) с парсером DOM (работа с интересными частями упрощается).

12
ответ дан 27 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

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