mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-01 10:11:37 +00:00
New BazaarSearch query routine
This commit is contained in:
@@ -29,8 +29,12 @@ public:
|
||||
};
|
||||
|
||||
struct BazaarTraderSearch_Struct {
|
||||
Trader trader;
|
||||
Trader trader;
|
||||
std::string trader_name;
|
||||
std::string name;
|
||||
bool stackable;
|
||||
uint32 icon;
|
||||
uint32 stats;
|
||||
};
|
||||
|
||||
struct WelcomeData_Struct {
|
||||
@@ -296,22 +300,50 @@ public:
|
||||
|
||||
static std::vector<BazaarTraderSearch_Struct> GetBazaarTraderDetails(
|
||||
Database &db,
|
||||
std::string &search_criteria_trader
|
||||
const std::string &search_criteria_trader,
|
||||
const std::string &name,
|
||||
const std::string &field_criteria_items,
|
||||
const std::string &where_criteria_items,
|
||||
uint32 max_results
|
||||
)
|
||||
{
|
||||
std::vector<BazaarTraderSearch_Struct> all_entries{};
|
||||
|
||||
auto query = fmt::format(
|
||||
auto query_2 = fmt::format(
|
||||
"WITH ranked_trader_items AS ("
|
||||
"SELECT trader.id, trader.character_id, trader.item_id, trader.item_unique_id, trader.augment_one, "
|
||||
"trader.augment_two, trader.augment_three, trader.augment_four, trader.augment_five, trader.augment_six, "
|
||||
"trader.item_charges, trader.item_cost, trader.slot_id, trader.char_entity_id, trader.char_zone_id, "
|
||||
"trader.char_zone_instance_id, trader.active_transaction, c.`name` FROM `trader` "
|
||||
"trader.char_zone_instance_id, trader.active_transaction, c.`name`, "
|
||||
"items.name AS n1, items.stackable, items.icon, {}, "
|
||||
"ROW_NUMBER() OVER (PARTITION BY trader.character_id) AS row_num "
|
||||
"FROM trader "
|
||||
"INNER JOIN character_data AS c ON trader.character_id = c.id "
|
||||
"WHERE {} ORDER BY trader.character_id ASC",
|
||||
search_criteria_trader
|
||||
"JOIN peq642024_content.items AS items ON trader.item_id = items.id "
|
||||
"WHERE items.`name` LIKE '%{}%' AND {} AND {}"
|
||||
") "
|
||||
"SELECT * FROM ranked_trader_items "
|
||||
"WHERE row_num <= '{}';",
|
||||
field_criteria_items,
|
||||
Strings::Escape(name),
|
||||
where_criteria_items,
|
||||
search_criteria_trader,
|
||||
max_results
|
||||
);
|
||||
|
||||
auto results = db.QueryDatabase(query);
|
||||
// auto query = fmt::format(
|
||||
// "SELECT trader.id, trader.character_id, trader.item_id, trader.item_unique_id, trader.augment_one, "
|
||||
// "trader.augment_two, trader.augment_three, trader.augment_four, trader.augment_five, trader.augment_six, "
|
||||
// "trader.item_charges, trader.item_cost, trader.slot_id, trader.char_entity_id, trader.char_zone_id, "
|
||||
// "trader.char_zone_instance_id, trader.active_transaction, c.`name` FROM `trader` "
|
||||
// "INNER JOIN character_data AS c ON trader.character_id = c.id "
|
||||
// "WHERE {} "
|
||||
// "GROUP BY trader.item_id "
|
||||
// "ORDER BY trader.character_id ASC",
|
||||
// search_criteria_trader
|
||||
// );
|
||||
|
||||
auto results = db.QueryDatabase(query_2);
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
return all_entries;
|
||||
@@ -339,6 +371,10 @@ public:
|
||||
e.trader.char_zone_instance_id = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||
e.trader.active_transaction = row[16] ? static_cast<uint8_t>(strtoul(row[16], nullptr, 10)) : 0;
|
||||
e.trader_name = row[17] ? row[17] : std::string("");
|
||||
e.name = row[18] ? row[18] : "";
|
||||
e.stackable = atoi(row[19]) ? true : false;
|
||||
e.icon = row[20] ? static_cast<int32_t>(atoi(row[20])) : 0;
|
||||
e.stats = row[21] ? static_cast<int32_t>(atoi(row[21])) : 0;
|
||||
|
||||
all_entries.push_back(e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user