Извлечение данных из базы данных. как написать al oop function PHP MYSQL - PullRequest
0 голосов
/ 06 августа 2020

Проблема в следующем. У меня есть две таблицы пользователей и карты. Как написать функцию al oop, когда у пользователя две и более карты? Пример: у пользователя bane есть карточки 222222 и 454545. Однако, когда я отправляю вопрос в поле поиска, он выкидывает только первую карточку.

<?php 
    require "connection.php";
    $search = $_POST['search'];

    $sql = "SELECT users.first_name, users.second_name, cards.card_number
            FROM users
            INNER JOIN cards
            ON cards.user_id = users.id
            WHERE cards.card_number = '$search'
            OR users.first_name = '$search'
            OR users.second_name = '$search'";

    $query = mysqli_query($db, $sql);
    $result = mysqli_fetch_assoc($query);

    echo $result['first_name']." ".$result['second_name']." ",
    $result['card_number']; ?>

https://i.stack.imgur.com/0VvXF.jpg

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Вы возвращаете одно значение. Если бы мне пришлось показать все карточки пользователей, я бы сделал что-то вроде этого.

<?php 
    require "connection.php";
    $search = $_POST['search'];

    $sql = "SELECT users.first_name, users.second_name, cards.card_number
            FROM users
            INNER JOIN cards
            ON cards.user_id = users.id
            WHERE
            users.first_name = '$search'
            OR users.second_name = '$search'";

    $query = mysqli_query($db, $sql);
while ($row = mysqli_fetch_assoc($query)) {

    echo $row['first_name']." ".$row['second_name']." ",
    $row['card_number']; 
} 
?>

Это должно напечатать строку для каждой карты.

Вы также можете изменить предложение where для чего-то вот так, чтобы найти частичные строки:

users.first_name LIKE '%$search%' 

Но если вы хотите иметь возможность искать номер карты и находить все карты, связанные с ее владельцем, то вы должны предпринять некоторые дополнительные шаги.

Я бы сделал go для чего-то вроде этого:

 SELECT t1.customerIDi, cards.number, customer.* 
 FROM CARDS
 LEFT JOIN customer ON cards.CustomerID = customer.id
 INNER JOIN (
     SELECT customer.id AS customerIDi
     FROM customer
     LEFT JOIN cards
     ON cards.CustomerID = customer.id
     WHERE
     Cards.Number = "$search"
 ) AS t1
 ON t1.customerIDi = cards.CustomerID

http://sqlfiddle.com/#! 9 / 82ad8 / 23/0

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

0 голосов
/ 06 августа 2020

Бег

$results = mysqli_fetch_assoc($query);

foreach( $results as $result) {
    echo .....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...