• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak stworzyć warunek pobierający z bazy pozostałe rekordy?

Object Storage Arubacloud
0 głosów
463 wizyt
pytanie zadane 28 marca 2019 w PHP przez gambi Początkujący (350 p.)
Postanowilem w ramach nauki stworzyc prosty skrypt na potrzeby pozycjonowania... cos ala katalogowanie stron i  mam trzy tabele w bazie danych: 1 katalogowana strona, 2. miejscowka do ktorej dodaje stronę i trzecia tabela z lista dodanych linków (tu zapisuje m.in. Id_strony i Id_miejscowki).

Moze ktos moglby mi podpowiedziec jak wylistowac w formularzu dodawania kolejnego linku tylko te miejscowki do ktorych jeszcze strona nie zostala dodana?

2 odpowiedzi

0 głosów
odpowiedź 29 marca 2019 przez Chess Szeryf (76,710 p.)
wybrane 29 marca 2019 przez gambi
 
Najlepsza

Nazwa np. ground byłaby trafniejsza niż field, ale niech już będzie.

select * from field1;
+----+------+------------+
| id | kind | fruit      |
+----+------+------------+
|  1 | A    | apple      |
|  2 | B    | strawberry |
|  3 | C    | pear       |
|  4 | D    | potato     |
+----+------+------------+
select * from field2;
+----+------+-----------+
| id | kind | fruit     |
+----+------+-----------+
|  1 | C    | apple     |
|  2 | B    | pear      |
|  3 | A    | tomato    |
|  4 | D    | blueberry |
|  5 | E    | coconut   |
+----+------+-----------+
select field2.id, field2.kind, field2.fruit from field2 where field2.kind not in (select field1.kind from field1);
+----+------+---------+
| id | kind | fruit   |
+----+------+---------+
|  5 | E    | coconut |
+----+------+---------+

Nie raz problem lepiej opisać w ten sposób, niż ten, który zaprezentowałeś:

Jednym foreach'em umiem wylistować sobie pole do którego jest już dodany owoc.

...

Chciałbym porównać wszystkie pola z tymi, które są już dodane.

Moim zdaniem, szybciej można coś wywnioskować o co chodzi.

Możliwe, że istnieje alternatywa do powyższego zapisu SQL, ale tego musiałbyś poszukać sam.

http://www.mysqltutorial.org/sql-in.aspx

komentarz 29 marca 2019 przez gambi Początkujący (350 p.)
Dzieki wielkie... kurcze probowalem wczesniej z NOT IN tylko ze nie pomyslalem ze tam moze byc drugi SELECT kombinowalem raczej z ifkami wewnątrz:)

Odnosnie opisu problemu - jestem na poczatku swojej przygodyi ciezko mi czasem nawet nazwać to czego szukam:)

A tak jeszcze a propos lepiej jest pytać kazdorazowo baze czy szukac rozwiazania po stronie php? Bo mysle ze i z prownaniem tablic mozna by bylo cos tu stworzyc... tylko sie zastanawiam czy  jest to sensowne czy niekoniecznie?
komentarz 29 marca 2019 przez Chess Szeryf (76,710 p.)
Nie rozumiem, bazę chyba powinieneś odpytywać jednorazowo (zależy od kontekstu), a nie kilka razy o to samo.

Masz chyba napisany mniej więcej taki kod:

1. Łączenie z bazą danych.

2. Wyciągnięcie z bazy odpowiednich rekordów.

3. Wyświetlenie wyciągniętych rekordów.

I dalej robisz z tym fantem co chcesz.
0 głosów
odpowiedź 28 marca 2019 przez olekjs Gaduła (4,540 p.)

Szukasz wszystkich katalogowanych stron, które nie mają miejscówki.

SELECT *  FROM (tabela z lista dodanych linkow) WHERE id_miejscowki IS NULL";

Oczywiście musisz trochę zamienić powyższe zapytanie, ale jest to jakaś droga do rozwiązania.

komentarz 28 marca 2019 przez gambi Początkujący (350 p.)
No tak mi chyba nie zadziala bo w liscie dodanych linkow sa tylko dodane linki wiec w tej tabeli nie znajde katalogowanych stron ktore nie maja miejscowki

czyli mam strone ktora kataloguje np. x.pl id_strony: 1 i dodalem ją do katalog.pl id_miejscowki 2

w tabeli dodane linki mam id_strony 1 i id_miejscowki 2

i chodzi o to ze dalej katalogujac ta strone chcialbym wyswietlic wszystkie miejscowki z bazy z wyjatkiem tych juz dodanych
komentarz 28 marca 2019 przez Chess Szeryf (76,710 p.)
Podaj przykład z jakich dane jakie dane chcesz otrzymać. Trafiony przykład z pewnością przyspieszy rozwiązanie problemu.
komentarz 28 marca 2019 przez olekjs Gaduła (4,540 p.)
Mam pomysł, który poszedłby na łatwiznę bez tworzenia trudniejszego zapytania.

Wyciągnij wszystkie miejscówki. Potem w przeiteruj wszystkie i daj jakiegoś if'a, który sprawdzi czy dana miejscówka jest już w 3 tabeli. Jeśli jest niech doda ten rekord to jakiejś tablicy etc. W taki sposób w tablicy będziesz miał miejscówki, które nie mają strony.
komentarz 29 marca 2019 przez gambi Początkujący (350 p.)

@Chess, tabela dodanelinki 

id id_strony id_miejscowki data url tekst

tabela miejscowki

id url dr moderacja dofollow spam

tabela strony:

id strona

 

i teraz tak

jednym foreachem umiem wylistowac sobie miejscowki do ktorych jest juz dodana dana strona

	<?php
  $id = $_GET['id'];
  $zapytanie = $db->prepare('SELECT * FROM `dodanelinki` WHERE id_strony=:id');
  $zapytanie->bindParam(':id', $id);
  $zapytanie->execute();

		foreach ($zapytanie as $link) {

	  echo '<tr><th scope="row">'.$link['id'].'</th>';
    echo '<td>'.$link['data'].'</td>';
	  echo '<td><a href="projekt.php?id='.$link['id'].'">'.$link['url'].'</a></td>';
    echo '<td><a href="projekt.php?id='.$link['id'].'">'.$link['tekst'].'</a></td></tr>';

	}
	?>

w drugim foreachu mam liste miejscowek wszystkich

    <?php
    $sth3 = $db->prepare( 'SELECT * FROM miejscowki');
    $sth3->execute();
    $miejscowki = $sth3->fetchAll();

    foreach ($miejscowki as $miejscowka) {
     echo '<option value="'.$miejscowka['id'].'"> '.$miejscowka['url'].'</option>';


    }
    ?>

i chcialbym porownac wszystie miejscowki z tymi ktore sa juz dodane nie wiem moze array_diff ale nie wiem jak przekazac $link['id'] jako tablice i porownac z miejscowka['id'] i wylistowac tylkko roznice. chyba ze jest jeszcze jakis inny lepszy sposob?:)

Podobne pytania

0 głosów
2 odpowiedzi 405 wizyt
pytanie zadane 30 października 2017 w PHP przez koyoo Początkujący (340 p.)
0 głosów
1 odpowiedź 711 wizyt
0 głosów
1 odpowiedź 444 wizyt
pytanie zadane 17 grudnia 2017 w SQL, bazy danych przez seam3 Początkujący (450 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...