0
votes

Comment puis-je boucler un tableau basé sur sa longueur?

Mon entrée est '[société_a, société_b, société_c]' qui est une chaîne et je dois déjà utiliser xxx

pour le convertir.

mon filtre xxx

J'essaie d'obtenir les données que fournisseurs égaux à $ Array [0] , $ Array [1] , $ Array [2] qui est société_a, société_b, société_c . Mon Fournisseurs est le format JSON, donc j'utilise comme et % pour la correspondre. En faisant que j'utilise une boucle pour le faire, mais je ne peux obtenir aucune donnée.

Sortie

Entrez la description de l'image ici

Comme vous pouvez le voir, j'ai essayé d'imprimer Le Count ($ array) et la valeur est 3 . et echo $ array [$ i] = société_a, société_b, société_c Qui est correspondant avec mon entrée.

J'ai essayé de changer cette ligne $ Query-> où («fournisseurs», «comme», [$ i]. % ']); à $ requérant-> où ("fournisseurs", "comme", ["%". $ TRAY [0].'% ']);

et j'obtiens toutes les données que fournisseur = société_a qui est ma première entrée (alors je suppose que mes codes sont des œuvres. Mais pourquoi le tableau $ [$ I] ne fonctionne pas?

J'ai imprimé mon echo $ $ -> tosql (); et c'est ce que j'ai xxx

la requête correcte doit être xxx


6 commentaires

Vous pouvez faire de deux manières. Au lieu d'exploser par virgule, vous pouvez utiliser la même chaîne dans dans la clause de la requête de base de données. Ou vous pouvez utiliser foreach au lieu de pour ($ i = 0; $ i <$ j; $ i ++) {


@Navedramzan Sry, pas comprendre


Question mise à jour


J'ai ajouté une réponse


"Mes fournisseurs Le champ est le format JSON, donc j'utilise comme et% pour le faire correspondre." - Terrible. Utilisez la fonctionnalité JSON fournie par le SGBD - ou stockez les données dans un format / structure différent. La pêche dans Json en utilisant comme n'est pas meilleure que de stocker de bonnes données (mauvaises) anciennes de la virgule classique dans des champs uniques.


fournisseurs =? Et fournisseurs =? est bizarre. Vous ne pouvez pas avoir la même colonne égale à plusieurs valeurs distinctes en même temps. Essayez ou au lieu de et.


3 Réponses :


-1
votes

Le meilleur moyen de déboguer les requêtes SQL défaillants consiste à examiner le journal de requête:

https://laravel.com/docs/5.0/database#query-logging xxx


1 commentaires

Bien que vous ayez peut-être raison, cela ne répond à peine à la question de l'OP ...



1
votes

Vous pouvez faire de 2 façons.

1) xxx


6 commentaires

@overflowstack c'est le même code que le vôtre mais avec une pourbeach. Cela fonctionne si vous le mettez correctement correctement.


@overflowstack vous pouvez marquer cette réponse correcte, si sa résolution de votre requête.


@Navedramzan non, je ne peux pas obtenir de données à l'aide de ce code


AT LINE ECHO $ ​​A A Pouvez-vous voir une sortie ou une valeur?


oui votre code est identique avec mon code, tableau stocké l'entrée mais ne peut pas obtenir le résultat


Veuillez consulter la question mise à jour et vérifier la requête imprimée de quelle requête que nous avons à la fois est SELECT * à partir de bonus_company où les bonus.id = bonus_company.fk_bonus_id et fournisseurs =? et fournisseurs =? mais la requête correcte et logique doit être Sélectionnez * à partir de bonus_company où des bonus.id = bonus_company.fk_bonus_id et (fournisseurs comme? ou des fournisseurs comme?)



1
votes

Voici la table de base de données SQL

$string = "company_A, company_B"; //string of company names you want to search
$array = explode( ",", $string); //convert string to array
$i = 1;    
$qry = "SELECT * from `company` ";
foreach($array as $companyName) {            
        if($i <= 1){
            $qry .= " WHERE `providers` LIKE '%".trim($companyName)."%' ";
        } else {
            $qry .= " OR `providers` LIKE '%".trim($companyName)."%' ";
        }            
        $i += 1;            
}    
$result = mysqli_query($connection, $qry); 
$companies = mysqli_fetch_assoc($result);     
foreach ($companies as $companyName){
    echo $companyName;
}


10 commentaires

Puis-je savoir ce que le C se référer à?


Et où est la $ entreprises et Connection $ vient?


C est l'alias de table utilisée pour donner un nom temporaire. Pour plus de détails => dev.mysql.com/doc /refman/8.0/fr/problems-with-alias.html et $ entreprises viennent de la base de données


Donc, je n'ai pas besoin de la boucle pour faire ça?


Oui, si vous voulez que toutes les sociétés correspondantes, ils nécessitent une boucle. Vouliez-vous que le nom du fournisseur de trous (Nom des entreprises)?


ya je veux un ensemble correspondant au nom du fournisseur


BTW Voulez-vous voir ma question mise à jour? J'ai posté la requête imprimée là-bas, cela pourrait vous fournir un peu plus de détails


Que vous devez organiser conformément à votre exigence ici, je donne une réponse conceptuelle, espérons que je suis facile à convoiter dans votre exigence, j'ai expliqué la base de la requête SQL fusionnée avec PHP.


thx beaucoup mec, tu as sauvé ma journée, ça marche exactement comme je le voulais


Laissez-nous Continuez cette discussion en chat .