Как ЗАКАЗАТЬ, какой параметр всегда будет первым в запросе URL или MySQL? - PullRequest
0 голосов
/ 17 февраля 2019

Когда я запускаю запрос, он сохраняет группировку тегов в случайном порядке.

Вот как это выглядит сейчас:

https://www.example.com/app/user-images.php?tags=peace&tags2=dogs&tags3=aesthetic

Изображение № 1 - мир

Изображение № 2 - мир

Изображение № 3 - собаки

Изображение № 4 - собаки

Изображение № 5 - эстетическое

Изображение № 6 - мир

Ожидаемый результат:

Изображение № 1 - мир

Изображение № 2 - мир

Изображение № 3 - мир

Изображение № 4 - собаки

Изображение № 5- собаки

Изображение # 6 - эстетическое

Есть ли способ, которым я могу это сделать?Первым тегом будет мир, вторые собаки, третья эстетика на основе URL.Вот мой код:

$tags = $_GET['tags'];
$tags2 = $_GET['tags2'];
$tags3 = $_GET['tags3'];

$fetch = mysqli_query($conn, "SELECT * FROM users JOIN user_images ON users.username = user_images.username WHERE tags = '$tags' OR tags = '$tags2' OR tags = '$tags3' ORDER BY user_images.tags ASC"); 

Я пытался использовать ORDER BY user_images.tags ASC, но это не очень помогает, поскольку независимо от того, где я помещаю теги в URL, все они имеют одинаковый порядок.

Ответы [ 3 ]

0 голосов
/ 17 февраля 2019

Вы можете использовать выражение CASE для управления вашим порядком, отдавая приоритет каждому тегу в следующем порядке:

SELECT * 
FROM users 
JOIN user_images ON users.username = user_images.username 
WHERE tags = '$tags' OR tags = '$tags2' OR tags = '$tags3' 
ORDER BY CASE WHEN tags = '$tags' THEN 1
              WHEN tags = '$tags2' THEN 2
              WHEN tags = '$tags3' THEN 3
              END
0 голосов
/ 17 февраля 2019

Вы можете сортировать по нескольким критериям, поэтому в этом случае добавление условий поиска к заказу должно работать.EG:

...
ORDER BY tags = '$tags' DESC, tags = '$tags2' DESC, tags = '$tags3' DESC
0 голосов
/ 17 февраля 2019

Первая идея, которая приходит в голову, - это сделать 3 отдельных запроса, по одному для каждого тега:

$results = [];
foreach ([$tags, $tags2, $tags3] as $tag) {
    $fetch = mysqli_query($conn, "SELECT * FROM users JOIN user_images ON users.username = user_images.username WHERE tags = '$tag'");
    while ($row = $fetch->fetch_assoc())
        $results[] = $row;
    $fetch->close();
}

Хотя этот код, вероятно, работает, он оставляет широко открытой дверь для SQL-инъекции .Вы должны использовать позиционные параметры внутри запроса и передавать фактические значения за пределы запроса, чтобы предотвратить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...