Jak zapytaniem sprawdzić czy w danym ciągu jest dana liczba

Witam

Nie wiem kompletnie jak to zrobić.

Spróbuje to wytłumaczyć:

Mam sobie liczbę: 1

I teraz muszę wyświetlić wszystkie rekordy które zawierają ta liczbę. A problem w tym, że w bazie zapisane są tak te dane: 4,1,7,9

$link2=mysql_query("SELECT * FROM numery WHERE grupa='$grupa_id'");

	while($row2=mysql_fetch_array($link2))

	{

czyli kolumna grupa ma zapisane liczby w takim formacie jak pisałem wyżej. Jak teraz sprawdzić to za pomocą zapytania czy w tej kolumnie znajduje się liczba 1 …?

Z góry dziekuje za pomoc.

najpierw rozdziel sobie wynik z rekordu na tablicę:

$table=explode(',',$row2);

następnie porownaj komórki tabeli czy są równe 1:

foreach ($table as $value){

if ($value == 1){

echo 'znaleziono';

}

else

{

echo 'nie znaleziono';

}

}

SELECT * FROM numery WHERE grupa LIKE ‘%$grupa_id%’

@matzu, ten sposób wyszuka wszystkie wystąpienia ‘$grupa_id’, czyli w tym przypadku cyfrę 1, a co za tym idzie i 1, 10, 21, 4131 itd., a należałoby konkretnie wskazać tylko i wyłącznie ‘$grupa_id’.

Dziękuje za odpowiedź.

Problem w tym, że gdy w $grupa_id jest 1, a w kolumnie grupa np. 1,3,66,7,22,11

To nie znajduje niczego. Działa dopiero wtedy gdy jest samo 1

@ jj_el - sposób dobry, jednak nie przejdzie przez ten mój warunek do tego momentu. (patrz wyżej)

@matzu - jest blisko, jednak tak jak mówi @GediMaster - wyszukuje 1, ale i tez 12, 874219, itd

@GediMaster: Oczywiście masz rację, za bardzo zasugerowałem się tym przykładem.

Dobra no to skoro baza danych to MySQL to można spróbować takiej składni:

SELECT * FROM numery WHERE grupa REGEXP '(,$grupa_id,|^$grupa_id,|,$grupa_id$)'

Ale od razu mówię, że nie wiem na ile to jest wydajne.

Dodane 14.06.2010 (Pn) 7:27

Jeszcze coś, nie pamiętam jakie znaki w PHP były uznawane za znaki specjalne, być może będziesz musiał w tym zapytaniu gdzieś dorzucić jakiegoś \ czy co się tam używało. Ale samo zapytanie raczej działa, bo odpalałem na bazie danych (specjalnie ściągnąłem MySQL-a :P)

@matzu, to jeszcze nie jest to. To co Ty zapisałeś można dać prościej:

'SELECT * FROM numery WHERE grupy REGEXP \'[[:<:]]'.$grupa_id.'[[:>:]]\''

[EDIT] A jednak się pomyliłem, wszystko wydaje się w porządku :D:

$sql = 'SELECT * FROM numery WHERE grupy REGEXP \'[[:<:]]'.$grupa_id.'[[:>:]]\'';


if ($link2 = mysql_unbuffered_query($sql, $result))

{

	while($row2 = mysql_fetch_assoc($link2))

	{

		// Pozostały kod

	}

}

Dzięki, jednak coś nie działa…

W zaznaczonej linii wywala błąd:

mysql_unbuffered_query(): supplied argument is not a valid MySQL-Link resource in

aa i co ma być podłączone pod $result? bo gdy usunałem to $result to nic nie pokazało. Białą stronę. Czyli wychodzi na to że coś zapytanie nie działa tak jak powinno.

A co masz za ‘$result’, co Ci zwraca ta zmienna? Bo u mnie działa idealnie :). Możesz też wywalić zmienną $result jeśli masz tylko jedno połączenie MySQL:

mysql_unbuffered_query($sql)

Nie mam takiej zmiennej. A co ma zwracać?

$grupa_id = $row['grupy']; // == np. 1 (wyciągam z bazy)


if (is_numeric($grupa_id)) {



$sql = 'SELECT * FROM numery WHERE grupy REGEXP \'[[:<:]]'.$grupa_id.'[[:>:]]\'';


if ($link2 = mysql_unbuffered_query($sql))

{

   while($row2 = mysql_fetch_assoc($link2))

   {

To wywal $result i zostaw tylko jak wyżej napisałem: mysql_unbuffered_query($sql) :slight_smile:

Tak, ale jak pisałem wyżej kod pokazuje pustą stronę.

A powinno wypisać wyniki.

//EDIT:

W zapytaniu była literówka w nazwie kolumny.

Bardzo dziękuję za pomoc.

Miłego popołudnia.

Pozdrawiam

Na pewno $row[‘grupy’] to integer? Poza tym, czy w tabeli numery.grupy mają postać ‘1,2,3,4,5,…,N’? Jeśli tak, to zrób sobie osobny plik z poniższym kodem i sprawdź:

<?php

mysql_connect('localhost', 'użytkownik', 'jego_hasło');

mysql_select_db('twoja_baza');


function search($grupa_id = 0)

{

	$sql = 'SELECT * FROM numery WHERE grupy REGEXP \'[[:<:]]'.$grupa_id.'[[:>:]]\'';


	if ($grupa_id && ($link2 = mysql_unbuffered_query($sql)))

	{

		while($row2 = mysql_fetch_assoc($link2))

		{

			$reg_search .= "\n".$row2['id'].': '.$row2['grupy'];

		}

	}

	return '[Grupa '.$grupa_id.'] '.($reg_search ? $reg_search : "\n".'brak')."\n\n";

}


header('Content-Type: text/plain; charset=utf-8');


# Szukamy grup od 1 do 9

echo search(1);

echo search(2);

echo search(3);

echo search(4);

echo search(5);

echo search(6);

echo search(7);

echo search(8);

echo search(9);


mysql_close();


exit;

?>

Powinno Ci zwrócić coś takiego:

[Grupa 1] 

1: 3,4,7,1,2

4: 3,4,7,2,1

5: 1,4,7,2,9


[Grupa 2] 

1: 3,4,7,1,2

2: 3,4,7,5,2

4: 3,4,7,2,1

5: 1,4,7,2,9


[Grupa 3] 

brak


... itd

Dzięki.

Pozdrawiam

$wybierane_grupy = '15,17';

$tablica = explode(",", $wybierane_grupy);

$liczenie = count($tablica);

$i = 0;

while($i <= $liczenie){

        if($i == 0){

                $or = '';

        }

        elseif($i > 0){

                $or = ' OR ';

        }

        $zapytanie .= $or .'grupa REGEXP \'[[:<:]]'. $tablica[$i] .'[[:>:]]\'';

        $i++;

}

$pytanie = 'SELECT * FROM numery WHERE '. $zapytanie;

$rezultat = mysql_query($pytanie);

while($wiersz = mysql_fetch_row($rezultat)){

                echo $wiersz[1] .' ==> '. $wiersz[5] .'
';

}