Voorwaarden opgeven voor databaseresultaten voor array

In mijn database heb ik een veld genaamd "modules" - infodata ziet er zo uit: 1, 4, 1, 3 Ik wil alle gegevens via PHP weergeven/uitvoeren met de nummers 1 - alle andere nummers moeten worden genegeerd.

I want to check the output result via an array NOT via mySQL

Enige suggestie hoe ik dat kan doen?

$list_modules = array();
            $res_m = $db->Execute("SELECT modules FROM users u WHERE user_id = '".$user->id."'");
            while ( $m = $res_m->GetNext() ) {
                $list_modules = array($m['modules']);
            }

            print_r($list_modules); //Output below 

Voorbeeld (uitvoer):

Array
(
    [0] => 1, 4, 1, 3
)
0
@Lars: Ja modules is een varchar
toegevoegd de auteur william, de bron
Welke database? MySQL ondersteunt de RLIKE-comparator die hier handig zou kunnen zijn.
toegevoegd de auteur tadman, de bron
zijn modules een varchar?
toegevoegd de auteur Lars, de bron

5 antwoord

Je zou dat moeten testen in je MySQL-vraag:

SELECT * FROM `TABLE` WHERE `modules` = 1;

Of, als dat niet mogelijk is ..

Loop met foreach en test voor 1?

$array = array(1,4,1,3);
foreach ($array as $element) {
    if ($element == 1) { echo 1; }
}
1
toegevoegd
Je bedoelt dat hij het op MySQL-niveau zou moeten doen. Dat is niet altijd mogelijk.
toegevoegd de auteur Madara Uchiha, de bron
Geef een voorbeelduitvoer van uw tabel. 3-4 rijen moeten doen. @william
toegevoegd de auteur Madara Uchiha, de bron
@william, hoe wil je dat de uitvoer eruit komt te zien? 1, 1?
toegevoegd de auteur Madara Uchiha, de bron
Mijn DB-veld: modules zijn kommagescheiden (1, 4, 1, 3) - Dus ik kan de WHERE modules = 1 niet gebruiken;
toegevoegd de auteur william, de bron
Ik weet niet of mijn voorbeeld nuttig is. Misschien kan ik bovenstaande hierboven combineren, ik weet gewoon niet hoe ik de andere nummers negeer die 1.
toegevoegd de auteur william, de bron
@william wil dit waarschijnlijk op MYSQL-niveau doen.
toegevoegd de auteur Jakub, de bron

U kunt dat in uw MySQL doen met een WHERE -clausule. Afhankelijk van de kolomnaam in de database:

SELECT column_name FROM table WHERE column_name = 1;

Opmerking: in uw vraag ziet het ernaar uit dat u een bereik probeert te vermelden:

met de nummers 1 - alle andere nummers moeten worden genegeerd.

Als u een bereik (bijvoorbeeld 1 - 4) wilt plaatsen, dan is uw WHERE-clausule:

WHERE column_name BETWEEN 1 AND 4
1
toegevoegd

Ik vond de oplossing die ik kon gebruiken.

$list_modules = array();
            $query = "SELECT modules FROM users WHERE user_id = ".$user->id."";
            $res_m = $db->Execute($query);
            while ( $m = $res_m->GetNext() ) {
                $list_modules = array('id' => $m['modules']);
            }

$modules = explode(",",$list_modules['id']);
            foreach ($modules as $key => $value) {

                if($value == 1){
               //list data    
                   }
                }
            }
0
toegevoegd

Dit zou het moeten doen ... er is echt geen andere manier om Varchar als col te zien, je moet ook strings zoals 15, 21, etc. elimineren, dus% 1% zal niet werken.

SELECT modules FROM users WHERE user_id = ".$user->id." AND modules LIKE % 1,%

Geef het een kans en laat het me weten als het werkt.

0
toegevoegd
Altijd ontsnappen aan uw SQL. Het is roekeloos om deze stap over te slaan.
toegevoegd de auteur tadman, de bron
Bedankt ... Ik zou nooit moeten aannemen ... Zorg ervoor dat je aan je SQL ontsnapt
toegevoegd de auteur Lars, de bron

U zei in uw opmerking dat het veld modules door komma's gescheiden waarden bevat, klopt dat? Ik denk dat het veld modules VARCHAR , CHAR of een andere tekenreeks is. Als dat het geval is, kunt u een zoekopdracht gebruiken zoals:

SELECT * FROM `tableName` WHERE `modules` LIKE '%1,%';

Er kunnen andere oplossingen zijn, waarschijnlijk meer optimaal, maar deze zou goed moeten werken, denk ik.

0
toegevoegd
Dat gaat 1, 11, 111, 21, enzovoort, pakken.
toegevoegd de auteur tadman, de bron
Als 1 de laatste is, kan deze deze nu niet vinden. Dat komt overeen met 21,9 maar niet met 3,1 .
toegevoegd de auteur tadman, de bron
Dat is juist. Het zou nu in orde moeten zijn, ik corrigeerde de vraag om ook naar de komma te zoeken.
toegevoegd de auteur Pateman, de bron