Мне очень, очень не нравится публиковать ответы, которые я не проверял, но ради прогресса этого вопроса я сделаю удар.
"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
. Это может даже позволить вам избежать сложного синтаксиса подготовленных операторов.
Я думаю, что Вы используете довольно хороший. XML:: LibXML, Матовый Сержант и интерфейс Perl Christian Glahn к libxml2 Daniel Velliard являются одним из быстрее Синтаксические анализаторы XML, о которых я знаю.
Если Вам нужны скорость, питание или функции, XML:: LibXML является способом пойти. Если Вы после простоты использования, тем не менее, XML:: Простой жизнеспособная альтернатива.
По моему опыту, XML:: Простой является лучшим для быстрого и грязного парсинга XML. Мы используем его для парсинга данных от третьих лиц, которые не всегда соответствуют стандарту XML. XML:: Простые броски информативные ошибки и получают Вас выполнение чрезвычайно быстро.
Вы могли также посмотреть на XML:: Либеральный, который использует LibXML внизу.
Это действительно зависит от ваших потребностей, как говорят люди. Для анализа XML-файлов размером ~ 100 МБ (аннотации генов из TAIR , 1 файл на хромосому) я использовал модуль mirod XML :: Twig , который позволяет вам устанавливать обратные вызовы для анализа элементы, которые вас интересуют, представляя каждый субдокумент в виде дерева XML :: Simple. Он сочетает в себе преимущества парсера SAX (сканирование файла как потока) с парсером DOM (работа с интересными частями упрощается).