Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]Porównanie danych z dwóch tabel php (warunek IF)...?

Napisany przez: artvip 25.11.2009, 11:35:43

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ć sad.gif Męczyłem się już array, array_diff a może wystarczy zwykłe if ? Pomoże ktoś?

Dzięki

Napisany przez: korro 25.11.2009, 13:57:48

zacznij od zapoznania się z: http://www.php.net/manual/en/ref.array.php
w tych funkcjach na pewno znajdziesz coś dla siebie.

Napisany przez: thek 25.11.2009, 14:06:52

W zależności od struktury danych jedynie inaczej byś na pętlach używał wyszukiwania elementów w drugiej tablicy.
W najwyższej pętli byś wybierał klucz wyszukiwania. Potem używał szukajki w drugiej tablicy i zwracał pewne wyniki, które obrabiałbyś. Potem kolejny klucz szukania i tak w kółko...

EDIT: Tutaj miałbyś szukanie po user z query1 i wpisy w query2 dla kolumny usersl zwykłym porównaniem

  1. foreach( $query1 AS $user ) {
  2. foreach( $query2 AS $logs) {
  3. if($user['user'] == $logs['usersl']) {
  4. //róbta co chceta
  5. }
  6. }
  7. }
No chyba, że znasz dokładnie klucz nazwy usera szukanego to najbardziej zewnętrzny foreach leci i tylko wewnętrzny jest w użyciu. Oczywiście najszybsza implementacja polega na optymalizacji. Jakiej? Userowie w $query1 są różni a tabela $query 2 w każdym przebiegu nie tylko szuka ale w przypadku znalezienia pasującego rekordu, po wypisaniu danych na ekran czy do jakiegokolwiek strumienia, usuwa go smile.gif Każdy więc przebieg pętli daje nam szansę na skrócenie kolejnych.

Napisany przez: artvip 25.11.2009, 19:45:59

[font="Times New Roman"][size="3"] Thek,

doradź jeszcze proszę jak to osadzić w kodzie.. Rozumiem, że w pierwszej pętli robię klucz:

  1. <?php
  2. //połączenie z bazą
  3.  
  4. $query = "SELECT user FROM matryca group by user";
  5.  
  6. $results = http://www.php.net/mysql_query($query) or http://www.php.net/die(http://www.php.net/mysql_error());
  7. http://www.php.net/echo "<center><table border="1">n";
  8. while ($query = http://www.php.net/mysql_fetch_assoc($results)) {
  9. http://www.php.net/echo "<tr>n";
  10. foreach ($query as $user) {
  11.  
  12. http://www.php.net/echo "<td>n";
  13. http://www.php.net/echo $user;
  14. http://www.php.net/echo "</td>n";
  15. }
  16. http://www.php.net/echo "</tr>n";
  17. }
  18. http://www.php.net/echo "</table>n";
  19.  
  20. $query2 = "SELECT usersl, logi, badi, inne FROM Dane order by usersl";
  21.  
  22. $results2 = http://www.php.net/mysql_query($query2) or http://www.php.net/die(http://www.php.net/mysql_error());
  23. http://www.php.net/echo "<center><table border="1">n";
  24. while ($query2 = http://www.php.net/mysql_fetch_assoc($results2)) {
  25. http://www.php.net/echo "<tr>n";
  26.  
  27. // i tu mam problem z drugim foreach'em i czy na pewno tutaj powinien być ?
  28. [/size][/font] foreach( $query1 AS $user ) {
  29. foreach( $query2 AS $logs) {
  30. if($user['user'] == $logs['usersl']) {
  31. }
  32. }}}
  33. http://www.php.net/echo "</tr>n";
  34. }
  35. http://www.php.net/echo "</table>n";
  36. http://www.php.net/mysql_close();
  37. ?>
  38.  
  39. Rozwiązanie drugie które zrobiłem i na którym się zablokowałem to:
  40. [php]
  41. <?php
  42. //połączenie z bazą
  43.  
  44. $query = "SELECT user FROM matryca group by user";
  45.  
  46. $result = http://www.php.net/mysql_query($query) or http://www.php.net/die(http://www.php.net/mysql_error());
  47. $num_rows = http://www.php.net/mysql_num_rows($result);
  48.  
  49. for ($i=0; $i<$num_rows; $i++) {
  50.  
  51. $wiersz = http://www.php.net/mysql_fetch_array($result);
  52.  
  53. $array[$i] = http://www.php.net/array($wiersz["user"]);
  54.  
  55.  
  56. }
  57.  
  58. $query2 = "SELECT * FROM Dane";
  59.  
  60. $result2 = http://www.php.net/mysql_query($query2) or http://www.php.net/die(http://www.php.net/mysql_error());
  61. $num_rows2 = http://www.php.net/mysql_num_rows($result2);
  62.  
  63. for ($i=0; $i<$num_rows2; $i++) {
  64.  
  65. $wiersz2 = http://www.php.net/mysql_fetch_array($result2);
  66.  
  67. $array2[$i] = http://www.php.net/array($wiersz2["usersl"], $wiersz2["logi"], $wiersz2["badi"], $wiersz2["inne"]);
  68.  
  69. }
  70.  
  71. http://www.php.net/echo "<pre>";
  72. http://www.php.net/print_r($array);
  73. http://www.php.net/print_r($array2);
  74. http://www.php.net/echo "</pre>";
  75.  
  76. ?>


Może tutaj jakoś już łatwo z arraya porównywać ? Tylko problem w tym, że nie mogę dojść jak.. in_array myślę, że będzie najbardziej odpowiednie tylko jak.. Foreach'em też zapewne się da..

Blokada zaczyna mi się na samym początku.. if(....

Dzięki za wszelkie porady.

Napisany przez: thek 25.11.2009, 21:16:50

To zerknij sobie na spokojnie i pomyśl gdzie robisz porównanie smile.gif Masz w tej chwili dwie dwuwymiarowe tablice. Pierwsza z nich jest postaci:

  1. http://www.php.net/array( [0] => http://www.php.net/array([0] => 'user1'),
  2. [1] => http://www.php.net/array([0]=> 'user2'),
  3. [2] => http://www.php.net/array([0]=> 'user3')
  4. );

druga zaś to:
  1. http://www.php.net/array( [0] => http://www.php.net/array([0] => 'usersl1', [1] => 'logi1', [2] => 'badi1', [3]=> 'inne1'),
  2. [1] => http://www.php.net/array([0] => 'usersl2', [1] => 'logi2', [2] => 'badi2', [3]=> 'inne2'),
  3. [2] => http://www.php.net/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 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. http://www.php.net/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 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.

Napisany przez: artvip 26.11.2009, 20:54:32

Dziękuję smile.gif Działa ale to tylko część efektu który chcę osiągnąć więc dalej proszę o pomoc.

Teraz trochę skomplikuję.

Tabela 1 jak i Tabela 2 może mieć różną ilość rekordów. Tabelę 1 i 2 łączy ta sama nazwa "user" .
Array 1

  1. [url="http://www.php.net/array"] http://www.php.net/array[/url]( [0] => [url="http://www.php.net/array"]http://www.php.net/array[/url]([0]=> 'user1', [1] => 'logi1', [2] => 'badi1'),
  2. [1] => [url="http://www.php.net/array"]http://www.php.net/array[/url]([0]=> 'user2', [1] => 'logi2', [2] => 'badi2'),
  3. [2] => [url="http://www.php.net/array"]http://www.php.net/array[/url]([0]=> 'user3', [1] => 'logi3', [2] => 'badi2'));

Array 2
  1. http://www.php.net/array( [0] => http://www.php.net/array([0] => 'usersl1', [1] => 'logisl1', [2] => 'badisl1', [3]=> 'innesl1'),
  2. [1] => http://www.php.net/array([0] => 'usersl2', [1] => 'logisl2', [2] => 'badisl2', [3]=> 'innesl2'),
  3. [2] => http://www.php.net/array([0] => 'usersl3', [1] => 'logisl3', [2] => 'badisl3', [3]=> 'innesl3')
  4. [3] => http://www.php.net/array([0] => 'usersl3', [1] => 'logisl4', [2] => 'badisl4', [3]=> 'innesl4');
  5.  
Chciałbym porównać nie tylko po "user" z query1:
"SELECT user FROM matryca group by user";

ale także po innych wartościach - przykład:

"SELECT user, logi, badi FROM matryca"; do

"SELECT usersl, logisl, badisl, innesl FROM Dane";

Cel to wyświetlenie wszystkich danych plus te unikalne z dwóch tabel. Z przykładu który wcześniej
podawałem wyciągam dane tylko porównując tab 1 z tab 2 a teraz chodzi o zrobienie w drugą stronę.

Czy mam zrobić kolejne query 3 i 4 plus array3 i array4 a później to jakoś porównać czy jest jakiś
inny sposób?

Jeżeli array3 i array4 to jak później pokazać, powiązać z array1 i array2.

Mam nadzieje że w miarę jest to zrozumiałe sad.gif

dzięki



http://www.php.net/array


Napisany przez: thek 26.11.2009, 21:06:45

No to wtedy jedynie zmieniasz odpowiednio warunek w IF, by pasował do Twojego problemu. Nic więcej smile.gif

Napisany przez: artvip 26.11.2009, 21:52:29

hmm... rozważałem taką opcję smile.gif ale..

W przykładzie powyżej w array1 miałem tylko jedną wartość "users"

Teraz tych wartości będzie więcej:
$array[$i] = array($wiersz["usersl"], $wiersz["levelsl"], $wiersz2["NAMEsl"]);
$array2[$j] = array($wiersz2["user"], $wiersz2["emp"], $wiersz2["level"], $wiersz2["NAME"]);

jak zrobić w takim przypadku foreach:

  1. foreach( $array AS $users) {
  2. foreach($array2 AS $key => $dane) {
  3. if($users[0] == $dane[0] ) {
  4.  
  5. http://www.php.net/echo "<tr>";
  6. http://www.php.net/echo "<td><center>".$users[0]."</center></td>";
  7. http://www.php.net/echo "<td><center>".$dane[1]."</center></td>";
  8. http://www.php.net/echo "<td><center>".$dane[2]."</center></td>";
  9. http://www.php.net/echo "<td><center>".$dane[3]."</center></td>";
  10. http://www.php.net/echo "</tr>";
  11.  
  12. }
  13. }
  14. }

Powyżej było prosto. Była jedna wartość którą szukałem w 2 tabeli ale jak wartości jest więcej..?

  1. foreach( $array AS $users) {
  2. foreach($array2 AS $key => $dane) {
  3. if($users[0] == $dane[0] )
  4. if ($user[1] == $dane[1] {
  5.  
  6. itd? Definiując IFem interesujące mnie warunki?
  7. }
  8. }
  9. }


Dobrze myślę?

Napisany przez: thek 26.11.2009, 22:00:32

Myślisz w dobrym kierunku. Możesz to określić odrębnymi if jeśli będziesz robić z nimi różne rzeczy, lub jeśli za każdym razem to samo, to już w jednym IF stosując kwantyfikator OR:
if(user[0] == user2[0] OR user[1] == user2[1] OR ...)
smile.gif Tylko w przypadku porównywania wielu opcji nie usuwaj wierszy, bo jeden może pasować do wielu.

Napisany przez: artvip 27.11.2009, 10:39:02

Mój foreach:

  1. foreach ($array as $users) {
  2. $z = $users[0];
  3.  
  4. foreach ($array2 as $key => $dane) {
  5. $a = $dane[0];
  6. $b = $dane[1];
  7. $c = $dane[2];
  8. $d = $dane[3];
  9.  
  10.  
  11.  
  12. foreach ($array3 as $key2 =>$dane2) {
  13. $e = $dane2[0];
  14. $f = $dane2[1];
  15. $g = $dane2[2];
  16. $h = $dane2[3];
  17. }}}


W moim przypadku na user'a (jakiegoś) mam:
- w tabeli 1: 13 rekordów
- w tabeli 2: 1 rekord
Efekt jest taki że jak to wrzucam w tabelę to w lewej kolumnie mam 13 elementów a w drugiej kolumnie mam powielony 13 razy jeden element z kolumny 2.

IFami mi nie wychodzi.. Tzn wychodzi mi ale pokazuje tylko 1 rekord z tabeli 1 i tabeli 2 co nie jest zgodne z danymi z bazy. Chciałbym żeby w polach gdzie nie ma odpowiedniego elementu była pusta wartość a nie powielenie.. Mogę to jakoś zrobić?

Dzięki

Napisany przez: thek 27.11.2009, 13:09:02

To ja się pytam... Czemu zagnieżdżasz 3 foreach wewnątrz 2 zamiast umieścić 3 foreach PO 2 ? winksmiley.jpg Skoro 2 foreach ma 13 rekordów, a 3 ma 1 rekord, to w wyniku masz 13 razy 1 rekord smile.gif Gdyby rekordów było więcej to masz x razy y rekordów w ostatnim foreach smile.gif Pomyśl zanim zaczniesz zagnieżdżać za bardzo.

Napisany przez: artvip 27.11.2009, 15:00:31

Oczywiście racja, moje niedopatrzenie.

  1. foreach ($array as $users) {
  2.  
  3. $z = $users[0];
  4. foreach ($array2 as $key => $dane) {
  5.  
  6. $a = $dane[0];
  7. $b = $dane[1];
  8. $c = $dane[2];
  9. $d = $dane[3];
  10.  
  11. }
  12.  
  13. foreach ($array3 as $key2 =>$dane2) {
  14.  
  15. $e = $dane2[0];
  16. $f = $dane2[1];
  17. $g = $dane2[2];
  18. $h = $dane2[3];
  19.  
  20. }
  21.  
  22.  
  23. http://www.php.net/echo "<tr>";
  24. http://www.php.net/echo "<td>".$a."</td>";
  25. http://www.php.net/echo "<td>".$b."</td>";
  26. http://www.php.net/echo "<td>".$c."</td>";
  27. http://www.php.net/echo "<td>".$d."</td>";
  28. http://www.php.net/echo "<td>".$f."</td>";
  29. http://www.php.net/echo "<td>".$g."</td>";
  30. http://www.php.net/echo "<td>".$h."</td>";
  31. http://www.php.net/echo "</tr>";
  32.  
  33. }


tylko teraz jako wynik dostaję 1 rekord z tabeli I jeden rekord z tabeli II sad.gif

Napisany przez: thek 27.11.2009, 15:50:52

A gdzie zgubiłeś IFy? smile.gif Robiąc tak jak robisz nadpisujesz sobie zmienne od $a do $h cały czas. W sumie tak patrząc z innej perspektywy to skoro rozszerzona była tablica $users to masz nie tyle znowu ją gdzieś jeszcze raz przepychać jako trzecią, tylko sprawdzać kolejne jej wartości, każdą wartość z $users porównując z odpowiednią wartością w drugiej tablicy.

  1. foreach( $array AS $users) {
  2. foreach($array2 AS $key => $dane) {
  3. if($users[0] == $dane[0] ) {
  4. //tu jeśli userzy Ci sami
  5. }
  6. if($users[1] == $dane[1] ) {
  7. //tu jeśli logi te same
  8. }
  9. if($users[2] == $dane[2] ) {
  10. //tu jeśli badi te same
  11. }
  12. }
  13. }

Proszę... Myśl trochę sam bo to jest logika a na tym się opiera całe programowanie. Jeśli nie potrafisz myśleć logicznie to. Ja powoli widząc wyrywki Twojego kodu zaczynam się gubić co gdzie robisz i skąd biorą się nowe tablice oraz co zawierają. Dla mnie w tej chwili powinieneś mieć tylko dwie. Jedna z userami i ich danymi, a druga to jakaś rozszerzona. Wybierasz odpowiednie kolumny do porównania i jedziesz z tym koksem w sposób jak zaprezentowałem powyżej, tyle że zachowując odpowiednią pozycję kolumn. Jeśli masz w tych tablicach inną to zmieniasz odpowiednio i tyle. Jedyne co możesz zrobić dodatkowo to odpowiednio buforować wyniki by na końcu pętli lub kroku je wyświetlać, zależnie od upodobania.

Napisany przez: klez 30.01.2023, 12:16:58

Witam
Co zrobić gdy, mają się nie zgadzać.

  1. foreach( $array2 AS $key => $dane2 ) {
  2. foreach( $array AS $key => $dane){
  3.  
  4. if($dane[0] != $dane2[0]) { //sprawdzenie że nie ma!
  5. http://www.php.net/echo "<tr><td>".$l++."</td><td>".$dane['1']."</td><td>".$dane['2']."</td><td><b>".$dane['0']."</b></td><td>brak w bazie</td></tr>";
  6. }
  7. }
  8. }


W/w przykład nie działa

Napisany przez: com 30.01.2023, 18:31:58

a sprawdź co masz w tym array i array2 wink.gif

Napisany przez: trueblue 30.01.2023, 18:49:35

Jeśli dane pochodzą z bazy, to znalezienie danych, które są w tabeli 1, a których brak w tabeli 2 i vice versa, można osiągnąć z pomocą zapytania OUTER JOIN bezpośrednio na bazie.

Jeśli silnik nie obsługuje OUTER JOIN, to: https://kawalekkodu.pl/gul-gul-na-full-czyli-o-zlaczeniu-full-outer-join-w-mysql

Napisany przez: klez 31.01.2023, 10:07:22

to są 2 oddzielne bazy. zastosowanie JOIN nic nie daje.

  1.  
  2. $idb2 = http://www.php.net/mysql_connect ($db_s2, $db_u2, $db_p2) or http://www.php.net/die ($db_error01);
  3. mysql_set_charset('utf8', $idb2);
  4. http://www.php.net/mysql_select_db ($db_d2, $idb2) or http://www.php.net/die ($db_error02);
  5.  
  6. $idb1 = http://www.php.net/mysql_connect ($db_s1, $db_u1, $db_p1) or http://www.php.net/die ($db_error01);
  7. mysql_set_charset('utf8', $idb1);
  8. http://www.php.net/mysql_select_db ($db_d1, $idb1) or http://www.php.net/die ($db_error02);
  9.  
  10.  
  11. $num_rows = http://www.php.net/mysql_num_rows($wynik);
  12.  
  13. for ($i=0; $i<$num_rows; $i++) {
  14. $wrsz = http://www.php.net/mysql_fetch_array($wynik);
  15. $array[$i] = http://www.php.net/array($wrsz['RIGHT(nr_gwarancji, 6)'], $wrsz['idmonter_id'], $wrsz['data_zmiany']);
  16.  
  17. $num_rows2 = http://www.php.net/mysql_num_rows($wynik2);
  18.  
  19. for ($i=0; $i<$num_rows2; $i++) {
  20. $gwar = http://www.php.net/mysql_fetch_array($wynik2);
  21. $array2[$i] = http://www.php.net/array($gwar['RIGHT(nrg, 6)'], $gwar['kod_firmy_montujacej']);
  22.  
  23. }
  24.  
  25. foreach( $array2 AS $key => $dane2 ) {
  26.  
  27. foreach( $array AS $key => $dane){
  28.  
  29. if($dane[0] === $dane2[0]) { //to działa!
  30. http://www.php.net/echo "<tr><td>".$l++."</td><td>".$dane['1']."</td><td>".$dane['2']."</td><td><b>".$dane['0']."</b></td><td>Są w bazie</td></tr>";
  31. }
  32. }
  33. }


ale chcę sprawdzić czego mi brak w danych

  1. if($dane[0] !== $dane2[0]) {
  2.  
  3. http://www.php.net/echo "<tr><td>".$l++."</td><td>".$dane['1']."</td><td>".$dane['2']."</td><td><b>".$dane['0']."</b></td><td>Są w bazie</td></tr>";
  4. }

i to nie działa sad.gif

Napisany przez: trueblue 31.01.2023, 11:04:45

1. Nie JOIN, a OUTER JOIN.
2. Możliwe jest wykonywanie zapytania łączącego tabele z dwóch oddzielnych baz.
3. W Twoim kodzie brak zapytań SQL - dane nie pojawią się znikąd.

Napisany przez: klez 31.01.2023, 11:20:37

zapytania SQl

  1.  
  2. $sSQL2 = "SELECT RIGHT(nrg, 6), `kod_firmy_montujacej` FROM `gwarancje` WHERE `dta_zapisu` BETWEEN '$data_poczg' AND '$data_zakog' GROUP BY `nrg`, `kod_firmy_montujacej` ORDER BY `gwarancje`.`dta_zapisu` DESC LIMIT $limg";
  3. $wynik2 = http://www.php.net/mysql_query ($sSQL2, $idb2) or http://www.php.net/die ($db_error03);
  4.  
  5. $sSQL1 = "SELECT RIGHT(nr_gwarancji, 6),`idmonter_id`, `data_zmiany` FROM `homologator_gwarancja` WHERE `data_zmiany` BETWEEN '$data_pocz' AND '$data_zako' GROUP BY `nr_gwarancji`, `idmonter_id` ORDER BY `homologator_gwarancja`.`data_zmiany` DESC LIMIT $limh";
  6. $wynik = http://www.php.net/mysql_query ($sSQL1, $idb1) or http://www.php.net/die ($db_error03);


pierwszego jeszt 116 array
  1. [116] => http://www.php.net/array
  2. (
  3. [0] => 631516
  4. [1] => 0996
  5. [2] => 2023-01-30 05:55:35
  6. )
  7.  


a drugiego 41
  1. [41] => http://www.php.net/array
  2. (
  3. [0] => 633127
  4. [1] => 0963
  5. )


i chce wiedziec jakich barkuje zeby było 116 z prawiei i 116 z lewej

Napisany przez: trueblue 31.01.2023, 12:19:33

1. Nie wiem czy masz zdefiniowane $limg oraz $limh.
2. Do porównania należałoby raczej użyć array_intersect/array_diff/porównania całych tablic (==).

Napisany przez: klez 31.01.2023, 14:01:09

A jak to zapisać bo już się pogubiłem sad.gif

Napisany przez: Johnas 31.01.2023, 22:17:14

Cytat(klez @ 31.01.2023, 11:20:37 ) *
zapytania SQl
  1.  
  2. $sSQL2 = "SELECT RIGHT(nrg, 6), `kod_firmy_montujacej` FROM `gwarancje` WHERE `dta_zapisu` BETWEEN '$data_poczg' AND '$data_zakog' GROUP BY `nrg`, `kod_firmy_montujacej` ORDER BY `gwarancje`.`dta_zapisu` DESC LIMIT $limg";
  3. $wynik2 = http://www.php.net/mysql_query ($sSQL2, $idb2) or http://www.php.net/die ($db_error03);
  4.  
  5. $sSQL1 = "SELECT RIGHT(nr_gwarancji, 6),`idmonter_id`, `data_zmiany` FROM `homologator_gwarancja` WHERE `data_zmiany` BETWEEN '$data_pocz' AND '$data_zako' GROUP BY `nr_gwarancji`, `idmonter_id` ORDER BY `homologator_gwarancja`.`data_zmiany` DESC LIMIT $limh";
  6. $wynik = http://www.php.net/mysql_query ($sSQL1, $idb1) or http://www.php.net/die ($db_error03);


pierwszego jeszt 116 array
  1. [116] => http://www.php.net/array
  2. (
  3. [0] => 631516
  4. [1] => 0996
  5. [2] => 2023-01-30 05:55:35
  6. )
  7.  


a drugiego 41
  1. [41] => http://www.php.net/array
  2. (
  3. [0] => 633127
  4. [1] => 0963
  5. )


i chce wiedziec jakich barkuje zeby było 116 z prawiei i 116 z lewej



To nie lepiej w zapytaniu użyć left join i pobierac same zapisy nie pasujace do reszty ?

próbowałem to napisać, ale on ma w jednym i drugim zapytaniu dane limity podejrzewam że dla paginacji więc to nawet z lefto joinem nie zadziała... Musiałbym zobaczyć strukturę i zrozumieć co chcesz uzyskać

nie wiem czemu to kur*a zwraca pusty wynik, jak wyszukiwarka google w poszukiwaniu mojego szczęścia

  1. SELECT gwarancje.* FROM gwarancje RIGHT JOIN homologator_gwarancja ON gwarancje.nrg = homologator_gwarancja.nr_gwarancji WHERE gwarancje.nrg != homologator_gwarancja.nr_gwarancji


SELECT gwarancje.* FROM gwarancje RIGHT JOIN homologator_gwarancja ON gwarancje.nrg != `homologator_gwarancja`.`nr_gwarancji`




15 i 16 jest pojedynczo, a 17 podwójnie chociaż powinno być samo podwójnie... Szukaj duplikatów smile.gif ... możesz raz przeforeachować i do nowej tablicy dać podwójne... nie optymalnie, ale inaczej nie umiem... inaczej nie wiem jak to kurwa zrobić... ani left ini right join nie działa... psychiatra "Sarius" powiedział mi w piosence "trumna" że na końcu i tak zostanę sam...

Napisany przez: klez 1.02.2023, 13:11:36

A może zapisać

  1. foreach( $array2 AS $key => $dane2 )
  2. {
  3. foreach( $array AS $key => $dane )
  4. {
  5. if($dane[0] === NULL) { // pusty klucz!
  6. http://www.php.net/echo "<tr><td>".$l++."</td><td>".$dane['1']." ".$dane2['1']."</td><td>".$dane['2']."</td><td><b>".$dane['0']." ".$dane2['0']."</b></td><td>Są w bazie</td></tr>";
  7. }
  8. }
  9. }
  10.  


Ale jak zapisać ze $dane[0] nie istnieje (pusty - NULL)?

JOIN nie zadziała bo sa 2 różne serwery

Napisany przez: trueblue 1.02.2023, 14:25:25

Opisałem Ci już rozwiązania. Można wykonać zapytanie na dwóch różnych bazach/połączeniach.
Nie JOIN, a OUTER JOIN, albo wymienione wcześniej funkcje PHP, ewentualnie pętle z in_array.
Porównywanie elementów nie ma sensu, bo nie można porównać istniejącego elementu z nieistniejącym.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)