Ну, это почти невозможно без каких-либо определений таблиц, но вы делаете много соединений там. Вы начинаете с tblhosting.id и идете оттуда вверх. Если какая-либо из подключенных таблиц имеет двойную запись, вы получите больше хитов
Вы можете добавить DISTINCT
к вашему запросу, но это не решит основную проблему. Это может быть проблема с вашими данными: у вас есть 2 счета? Может быть, вы должны выбрать все (SELECT * FROM
) и проверить, что возвращается, может быть, проверьте ваши таблицы для двойного содержания.
Использование DISTINCT
в большинстве случаев не является хорошим выбором: это означает, что ваш запрос или ваши данные неверны (или вы не понимаете их полностью). Это может дать вам правильный результат на данный момент, но может привести к неприятностям позже.
Предположение о причине, по которой это происходит:
Вы не подключаете таблицу продуктов к цепочке идентификаторов. Итак, вы, по сути, добавляете «2» к вашему результату, насколько я вижу. Вы присоединяетесь к продуктам, и единственное, что ограничивает эту таблицу, это то, что «gid» должно быть 2. Так что, если вы добавите продукт с gid 2, вы получите другой результат. Либо присоединитесь к нему (может быть, tblproduct.orderid = tblorders.id? Просто угадайте здесь), либо просто удалите его, поскольку, насколько я вижу, он ничего не делает.
Если вы хотите сделать свой запрос немного понятнее, попробуйте неявно присоединиться, но сделайте это следующим образом. Таким образом, вы можете увидеть, что происходит
SELECT tblhosting.id, tblhosting.userid, tblhosting.orderid, tblhosting.packageid, tblhosting.server, tblhosting.domain, tblhosting.username, tblorders.invoiceid, tblproducts.gid, tblservers.ipaddress, tblinvoices.status
FROM tblhosting
JOIN tblproducts ON /*you're missing something here!*/
JOIN tblorders ON tblorders.id = tblhosting.orderid
JOIN tblinvoices ON tblinvoices.id = tblorders.invoiceid
JOIN tblservers ON tblservers.id = tblhosting.server
WHERE
tblorders.status = 'Pending'
AND tblproducts.gid = '2'
AND tblinvoices.status = 'Paid'