Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Porównanie danych z dwóch tabel php (warunek IF)...?
artvip
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 15.02.2009

Ostrzeżenie: (0%)
-----


Mam sobie kod:

<?php
$conn = mysql_connect("xxx","xxx","xxx");
mysql_select_db("xxx");
if (mysql_errno()) {
echo mysql_error() . ": " . mysql_errno() . "<br>n";
exit;
}
$query = "SELECT user FROM matryca group by user";

$result = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($result);

for ($i=0; $i<$num_rows; $i++) {

$wiersz = mysql_fetch_array($result);

echo "<br />";
echo "<td>".$wiersz["user"]."</td>";
echo "</td>";

}

$query = "SELECT usersl, logi, badi, inne FROM Dane order by usersl";

$result = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($result);

for ($i=0; $i<$num_rows; $i++) {

$wiersz = mysql_fetch_array($result);


echo "<td>".$wiersz["usersl"]."</td>";
echo "</td>";

}
?>

Chciałbym w jakiś sposób porównać wynik z query 1 tak aby do każdego unikalnego "User" odnalazł pasujące dane z query 2 i wyświetlił dane w postaci identycznych rekordów. Czyli dla User z bazy 1 znalazłem "jakieś" rekordy które zawierają sie w query 2 dla dla User z query 1. Podobne rozwiązanie zrobiłem MYSQL ale interesuje mnie rozwiązanie w PHP.

Kompletnie nie wiem jak się za to zabrać (IMG:style_emoticons/default/sad.gif) Męczyłem się już array, array_diff a może wystarczy zwykłe if ? Pomoże ktoś?

Dzięki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To zerknij sobie na spokojnie i pomyśl gdzie robisz porównanie (IMG:style_emoticons/default/smile.gif) Masz w tej chwili dwie dwuwymiarowe tablice. Pierwsza z nich jest postaci:
  1. array( [0] => array([0] => 'user1'),
  2. [1] => array([0]=> 'user2'),
  3. [2] => array([0]=> 'user3')
  4. );

druga zaś to:
  1. array( [0] => array([0] => 'usersl1', [1] => 'logi1', [2] => 'badi1', [3]=> 'inne1'),
  2. [1] => array([0] => 'usersl2', [1] => 'logi2', [2] => 'badi2', [3]=> 'inne2'),
  3. [2] => array([0] => 'usersl3', [1] => 'logi3', [2] => 'badi3', [3]=> 'inne3')
  4. );

lub coś w ten deseń. Popatrz w jakich indeksach masz userów i co się zmienia (IMG:style_emoticons/default/winksmiley.jpg)
To tablica tablic. Zmienia sie pierwszy indeks a user jest zawsze w indeksie 0 drugiego wymiaru w obu przypadkach. Wystarczy więc, że zrobisz foreach idący po tablicy userów i sprawdzający czy w drugiej pętli występuje również w tym samym miejscu ta sama osoba.

W efekcie sprowadza się to do:
  1. foreach( $array AS $users) { //tablica userów
  2. foreach($array2 AS $key => $dane) { //tablica danych
  3. if($users[0] == $dane[0] ) { //zauważ jakie indeksy tablic porównuję w strukturze obu!
  4. //tutaj sobie coś robię z uzyskanymi danymi
  5. unset $array2[$key]; //tak usuwasz dany rekord
  6. }
  7. }
  8. //size_checker
  9. }
Możesz optymalizować poprzez wyrzucanie potem odpowiedniego klucza z drugiej tablicy. Sprawi to fajną rzecz bo zmniejsza ową tablicę z danymi i gdy pętla przeskoczy do następnego usera, to danych będzie mniej, a więc będzie mniej pustych przebiegów i mniej if-ów (IMG:style_emoticons/default/smile.gif) Z każdym krokiem pierwszej pętli foreach (czyli z kolejnymi userami) druga tablica się zmniejsza i niejako działanie przyspiesza. Możesz jeszcze ewentualnie ustawić w miejscu oznaczonym "size_checker" warunek, że jeśli wielkość $array2 będzie 0 to ma zrobić break i wyjść z foreach na amen. Wtedy pozbędziesz się być może wielu pustych przejść pętli.
Go to the top of the page
+Quote Post

Posty w temacie
- artvip   [PHP]Porównanie danych z dwóch tabel php (warunek IF)...?   25.11.2009, 11:35:43
- - korro   zacznij od zapoznania się z: http://www.php.net/ma...   25.11.2009, 13:57:48
- - thek   W zależności od struktury danych jedynie inaczej b...   25.11.2009, 14:06:52
- - artvip   [font="Times New Roman"][size="3...   25.11.2009, 19:45:59
- - thek   To zerknij sobie na spokojnie i pomyśl gdzie robis...   25.11.2009, 21:16:50
- - artvip   Dziękuję Działa ale to tylko część efektu który c...   26.11.2009, 20:54:32
- - thek   No to wtedy jedynie zmieniasz odpowiednio warunek ...   26.11.2009, 21:06:45
- - artvip   hmm... rozważałem taką opcję ale.. W przykładzie...   26.11.2009, 21:52:29
- - thek   Myślisz w dobrym kierunku. Możesz to określić odrę...   26.11.2009, 22:00:32
- - artvip   Mój foreach: [PHP] pobierz, plaintext foreach ...   27.11.2009, 10:39:02
- - thek   To ja się pytam... Czemu zagnieżdżasz 3 foreach we...   27.11.2009, 13:09:02
- - artvip   Oczywiście racja, moje niedopatrzenie. [PHP] pobi...   27.11.2009, 15:00:31
- - thek   A gdzie zgubiłeś IFy? Robiąc tak jak robisz nadpi...   27.11.2009, 15:50:52
- - klez   Witam Co zrobić gdy, mają się nie zgadzać. [PHP]...   30.01.2023, 12:16:58
- - com   a sprawdź co masz w tym array i array2   30.01.2023, 18:31:58
- - trueblue   Jeśli dane pochodzą z bazy, to znalezienie danych,...   30.01.2023, 18:49:35
- - klez   to są 2 oddzielne bazy. zastosowanie JOIN nic nie ...   31.01.2023, 10:07:22
- - trueblue   1. Nie JOIN, a OUTER JOIN. 2. Możliwe jest wykonyw...   31.01.2023, 11:04:45
- - klez   zapytania SQl [PHP] pobierz, plaintext  $sSQL...   31.01.2023, 11:20:37
- - trueblue   1. Nie wiem czy masz zdefiniowane $limg oraz ...   31.01.2023, 12:19:33
- - klez   A jak to zapisać bo już się pogubiłem   31.01.2023, 14:01:09
- - Johnas   Cytat(klez @ 31.01.2023, 11:20:37 ) z...   31.01.2023, 22:17:14
- - klez   A może zapisać [PHP] pobierz, plaintext foreach...   1.02.2023, 13:11:36
- - trueblue   Opisałem Ci już rozwiązania. Można wykonać zapytan...   1.02.2023, 14:25:25


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 16:22