2016-03-24 2 views
0

Ich habe eine Abfrage, die einen Datensatz sucht, die gut funktioniert. Ich muss dann den Namen aller Felder wiederholen, die mit "Seq" beginnen und "1" enthalten.PHP Schleife durch ein Array auf der Suche nach allen Feldern, die 1 enthalten

meine Frage:

SELECT * FROM ROSE_Hist 
WHERE UniqueID = '1919' AND 1 IN (SeqID0101,SeqID0102,SeqID0103 ,SeqID0104,SeqID0105,SeqID0106,SeqID0107,SeqID0108,SeqID0109,SeqID0110,SeqID0201,SeqID0202,SeqID0203,SeqID0301,SeqID0302,SeqID0303,SeqID0304,SeqID0401,SeqID0402,SeqID0403,SeqID0404,SeqID0501, 
SeqID0502,SeqID0601,SeqID0602,SeqID0701,SeqID0702,SeqID0801,SeqID0802,SeqID0901,SeqID0902,SeqID0903,SeqID1001,SeqID1002,SeqID1003,SeqID1004,SeqID1101,SeqID1102,SeqID1201,SeqID1302,SeqID1303,SeqID1304,SeqID1305, 
SeqID1401,SeqID1402,SeqID1403,SeqID1404,SeqID1405,SeqID1406,SeqID1407,SeqID1408,SeqID1409,SeqID1410,SeqID1411,SeqID1501,SeqID1502,SeqID1504,SeqID1505,SeqID1601,SeqID1602,SeqID1603,SeqID1604,SeqID1605,SeqID1701,SeqID1702,SeqID1703,SeqID1704, 
SeqID1705,SeqID1801,SeqID1802,SeqID1901,SeqID1902,SeqID2001,SeqID2002,SeqID2101,SeqID2102,SeqID2201,SeqID2202,SeqID2203,SeqID2301,SeqID2302,SeqID2401,SeqID2402,SeqID2403,SeqID2501,SeqID2502,SeqID2503,SeqID2601,SeqID2602,SeqID2603,SeqID2701, 
SeqID2702,SeqID2703,SeqID2704,SeqID2801,SeqID2901,SeqID2902,SeqID3001,SeqID3002,SeqID3101,SeqID3201,SeqID3202,SeqID3203,SeqID3204,SeqID3301,SeqID3302,SeqID3401,SeqID3402,SeqID3501,SeqID3502,SeqID3601,SeqID3602,SeqID3603,SeqID3604,SeqID3605, 
SeqID3606,SeqID3701,SeqID3702,SeqID3703,SeqID3704,SeqID3801,SeqID3802,SeqID3803,SeqID3804,SeqID3901,SeqID3902,SeqID3903,SeqID3904,SeqID4001,SeqID4002,SeqID4003,SeqID4101,SeqID4102,SeqID4201,SeqID4202,SeqID4301,SeqID4302,SeqID4303,SeqID4304, 
SeqID4401,SeqID4501,SeqID4502,SeqID4503,SeqID4504,SeqID4505,SeqID4506,SeqID4507,SeqID4508,SeqID4509,SeqID4510,SeqID4511,SeqID4512,SeqID4513,SeqID4514,SeqID4601,SeqID4602,SeqID4603,SeqID4604,SeqID4701,SeqID4702,SeqID4703,SeqID4704,SeqID4705) ORDER BY Room ASC 

Dann brauche ich eine Schleife durch das Ergebnis und ech nur die Felder, die mit „Seq“ und enthalten die Nummer „1“ beginnen.

foreach ($row_RoomAudit as $key => $val) { 
    print "$key = $val\n"; 
} 

Ich habe etwas falsch hier, weil der "Foreach" alle Felder widergibt. Was müsste ich tun, um nur die Feldnamen zu wiederholen, die mit dem Namen "Seq" beginnen und "1" enthalten?

Vielen Dank für Ihre Zeit.

+0

haben Sie versucht, Zeichenfolgenfunktionen wie strpos zu verwenden? – DevMan

+0

Sie können 'preg_match' verwenden: http://php.net/manual/en/function.preg-match.php – Alex

Antwort

0

Eine schnelle Abhilfe mit strpos „1“ zu finden und substr

foreach ($row_RoomAudit as $key => $val) { 
     if (strpos($val, '1') !== FALSE && substr($val, 0, 3)=='Seq'){ 
      print "$key = $val\n"; 
     } 
    } 
+0

Hallo, wenn (strpos ($ val, '1')! == FALSE && substr ($ val , 0, 3) == 'Seq') {Sollte sein if (strpos ($ val, '1')! == FALSCH && substr ($ key 0, 3) == 'Seq') {, das funktioniert. – DCJones

0

dass ‚Seq‘ zu finden ist, weil Sie alle Felder AUSWAHL * verwenden. Wenn Sie nur die bestimmte Spalten auswählen möchten, haben Sie Ihre Abfrage zu ändern, dies zu tun:

SELECT SeqID0101,SeqID0102,SeqID0103 ,SeqID0104,SeqID0105,SeqID0106,SeqID0107,SeqID0108,SeqID0109,SeqID0110,SeqID0201,SeqID0202,SeqID0203,SeqID0301,SeqID0302,SeqID0303,SeqID0304,SeqID0401,SeqID0402,SeqID0403,SeqID0404,SeqID0501, 
SeqID0502,SeqID0601,SeqID0602,SeqID0701,SeqID0702,SeqID0801,SeqID0802,SeqID0901,SeqID0902,SeqID0903,SeqID1001,SeqID1002,SeqID1003,SeqID1004,SeqID1101,SeqID1102,SeqID1201,SeqID1302,SeqID1303,SeqID1304,SeqID1305, 
SeqID1401,SeqID1402,SeqID1403,SeqID1404,SeqID1405,SeqID1406,SeqID1407,SeqID1408,SeqID1409,SeqID1410,SeqID1411,SeqID1501,SeqID1502,SeqID1504,SeqID1505,SeqID1601,SeqID1602,SeqID1603,SeqID1604,SeqID1605,SeqID1701,SeqID1702,SeqID1703,SeqID1704, 
SeqID1705,SeqID1801,SeqID1802,SeqID1901,SeqID1902,SeqID2001,SeqID2002,SeqID2101,SeqID2102,SeqID2201,SeqID2202,SeqID2203,SeqID2301,SeqID2302,SeqID2401,SeqID2402,SeqID2403,SeqID2501,SeqID2502,SeqID2503,SeqID2601,SeqID2602,SeqID2603,SeqID2701, 
SeqID2702,SeqID2703,SeqID2704,SeqID2801,SeqID2901,SeqID2902,SeqID3001,SeqID3002,SeqID3101,SeqID3201,SeqID3202,SeqID3203,SeqID3204,SeqID3301,SeqID3302,SeqID3401,SeqID3402,SeqID3501,SeqID3502,SeqID3601,SeqID3602,SeqID3603,SeqID3604,SeqID3605, 
SeqID3606,SeqID3701,SeqID3702,SeqID3703,SeqID3704,SeqID3801,SeqID3802,SeqID3803,SeqID3804,SeqID3901,SeqID3902,SeqID3903,SeqID3904,SeqID4001,SeqID4002,SeqID4003,SeqID4101,SeqID4102,SeqID4201,SeqID4202,SeqID4301,SeqID4302,SeqID4303,SeqID4304, 
SeqID4401,SeqID4501,SeqID4502,SeqID4503,SeqID4504,SeqID4505,SeqID4506,SeqID4507,SeqID4508,SeqID4509,SeqID4510,SeqID4511,SeqID4512,SeqID4513,SeqID4514,SeqID4601,SeqID4602,SeqID4603,SeqID4604,SeqID4701,SeqID4702,SeqID4703,SeqID4704,SeqID4705 FROM ROSE_Hist 
WHERE UniqueID = '1919' AND 1 IN (SeqID0101,SeqID0102,SeqID0103 ,SeqID0104,SeqID0105,SeqID0106,SeqID0107,SeqID0108,SeqID0109,SeqID0110,SeqID0201,SeqID0202,SeqID0203,SeqID0301,SeqID0302,SeqID0303,SeqID0304,SeqID0401,SeqID0402,SeqID0403,SeqID0404,SeqID0501, 
SeqID0502,SeqID0601,SeqID0602,SeqID0701,SeqID0702,SeqID0801,SeqID0802,SeqID0901,SeqID0902,SeqID0903,SeqID1001,SeqID1002,SeqID1003,SeqID1004,SeqID1101,SeqID1102,SeqID1201,SeqID1302,SeqID1303,SeqID1304,SeqID1305, 
SeqID1401,SeqID1402,SeqID1403,SeqID1404,SeqID1405,SeqID1406,SeqID1407,SeqID1408,SeqID1409,SeqID1410,SeqID1411,SeqID1501,SeqID1502,SeqID1504,SeqID1505,SeqID1601,SeqID1602,SeqID1603,SeqID1604,SeqID1605,SeqID1701,SeqID1702,SeqID1703,SeqID1704, 
SeqID1705,SeqID1801,SeqID1802,SeqID1901,SeqID1902,SeqID2001,SeqID2002,SeqID2101,SeqID2102,SeqID2201,SeqID2202,SeqID2203,SeqID2301,SeqID2302,SeqID2401,SeqID2402,SeqID2403,SeqID2501,SeqID2502,SeqID2503,SeqID2601,SeqID2602,SeqID2603,SeqID2701, 
SeqID2702,SeqID2703,SeqID2704,SeqID2801,SeqID2901,SeqID2902,SeqID3001,SeqID3002,SeqID3101,SeqID3201,SeqID3202,SeqID3203,SeqID3204,SeqID3301,SeqID3302,SeqID3401,SeqID3402,SeqID3501,SeqID3502,SeqID3601,SeqID3602,SeqID3603,SeqID3604,SeqID3605, 
SeqID3606,SeqID3701,SeqID3702,SeqID3703,SeqID3704,SeqID3801,SeqID3802,SeqID3803,SeqID3804,SeqID3901,SeqID3902,SeqID3903,SeqID3904,SeqID4001,SeqID4002,SeqID4003,SeqID4101,SeqID4102,SeqID4201,SeqID4202,SeqID4301,SeqID4302,SeqID4303,SeqID4304, 
SeqID4401,SeqID4501,SeqID4502,SeqID4503,SeqID4504,SeqID4505,SeqID4506,SeqID4507,SeqID4508,SeqID4509,SeqID4510,SeqID4511,SeqID4512,SeqID4513,SeqID4514,SeqID4601,SeqID4602,SeqID4603,SeqID4604,SeqID4701,SeqID4702,SeqID4703,SeqID4704,SeqID4705) ORDER BY Room ASC 

Natürlich innerhalb der Schleife Filterung ist auch eine Möglichkeit, aber es ist besser Praxis nur die Daten anfordern Du brauchst es wirklich. Wenn Sie also nur diese Spalten ausgeben müssen, sollten Sie nur diese Spalten auswählen.

+0

Hallo alle. Ich änderte die Abfrage, um nur die Felder auszuwählen, die mit "Seq" laut Connum-Antwort beginnen. Ich habe dann Mawia HL reply foreach verwendet ($ row_RoomAudit als $ key => $ val) { if (strpos ($ val, '1')! == FALSCH && substr ($ val, 0, 3) == 'Seq') { print "$ key = $ val \ n"; } }, aber dies gibt kein Ergebnis aus. Ich weiß, dass die ersten beiden Felder "1" enthalten. Irgendwelche Ideen? – DCJones

+0

Dann zeigen Sie uns bitte Ihren vollständigen Code, vor allem den Weg von der Abfrage zu $ ​​row_RoomAudit Und auf die Weise müssen Sie nicht BEWEGEN, nur die Spalten auswählen und dann etwas in der Schleife filtern. – Connum

+0

Hallo Connum, Nach der Abfrage habe ich: $ RoomAudit = mysql_query ($ query_RoomAudit, $ iMaint) oder sterben (mysql_error()); $ row_RoomAudit = mysql_fetch_assoc ($ RoomAudit); $ totalRows_RoomAudit = mysql_num_rows ($ RoomAudit); Gefolgt von foreach ($ row_RoomAudit als $ key => $ val) { if (strpos ($ val, '1')! == FALSCH && substr ($ val, 0, 3) == 'Seq') { drucken "$ Schlüssel = $ val \ n"; } } Der Grund, warum ich alle "Seq" -Felder auswähle und sie im Filter verwende, besteht darin, nur die Felder zurückzugeben, die "1" enthalten. Oder mache ich das falsch? – DCJones