Izlistavanje iz baze

1

Izlistavanje iz baze

offline
  • Miljan Ilic
  • Pridružio: 18 Jun 2014
  • Poruke: 178

Napisano: 01 Jun 2015 20:58

Evo mene ponovo sa problemom vezanim za izlistavanje iz 2 MySQL tabele u 1 HTML tabelu.
Ovako imam 2 tabele: Fields i Content, iz tabele Fields gde je FieldName izlistavam Table Head u HTML-u:

<?php     $conn = new mysqli($SERVERNAME, $USERNAME, $PASSWORD, $DBNAME);     if ($conn->connect_error) {         die("Greska: " . $conn->connect_error);     }     $sql = "SELECT FieldName FROM Fields WHERE ForUser = '$User_Check' AND ForCategory = '$CategoryName'";     $result = $conn->query($sql);     if ($result->num_rows > 0) {          echo "<table class='table table-bordered'><thead><tr>";         while($row = $result->fetch_assoc()) {         echo "<th>".$row["FieldName"]."</th>";     }         echo "</tr></thead>";         echo "</table>";     }          else {         echo "<div style='margin-top: 18px;' class='alert alert-danger'><b>$lang[MANAGE_CATEGORY_ALERT]</b></div>";     }          $conn->close();     ?>

U HTML table Body izlistavam sadrzaj vezan za FieldName. FieldName uzimam iz prethodnog upita. Sada za svaki FieldName moram da kreiram poseban SQL upit i izlistam izlaz u <tbody><tr><td>Sadrzaj</td></tr></tbody>. Sada je problem kako da napravim SQL upit za svaki FieldName i izlistam u gore pomenutu HTML tabelu.

Pozdrav i hvala unapred!

Dopuna: 01 Jun 2015 23:17

Nasao sam nesto da je resenje za moj problem SQL JOIN, ali vec 3 sata nikako ne mogu da napravim neku kombinaciju sa WHERE ForUser = '$User_Check' AND ForCategory = '$CategoryName' AND ForField = 'ImePolja' jer mi ForField sluzi samo za drugu tabelu, isto ne znam kako da dobijem ForField vrednost. Ima li neko nekakvo resenje. Pozdrav i hvala unapred!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

U FROM klauzuli navedi spoj te dve tabele, a u SELECT klauzuli dopiši kolone iz druge tabele čije vrednosti su ti potrebne. Nešto ovako:
SELECT FieldName, <kolone_iz_druge_tabele> FROM Fields INNER JOIN Content ON Content.ForField = Fields.FieldName WHERE ForUser = '$User_Check' AND ForCategory = '$CategoryName';



offline
  • Miljan Ilic
  • Pridružio: 18 Jun 2014
  • Poruke: 178

Ne dobijam nikako ono sto trazim, sa tvojim kodom izbacuje error. Na slici se vide i upit i error:

Podatke hvatam sa mysqli_fetch_assoc()

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

Probaj da ispred problematične kolone dodaš ime tabele kojoj pripada.

offline
  • Miljan Ilic
  • Pridružio: 18 Jun 2014
  • Poruke: 178

Napisano: 02 Jun 2015 17:20

Probao sam i to, ali posto WHERE mora da se odnosi na obe tabele ne dobijam dobar rezultat...

Dopuna: 02 Jun 2015 17:27

A posto ja Table Head dobijam skrptom iz prvog posta mogu li nekako da napravim nesto kao foreach() i napravim poseban upit za svaki ForField i tako izlistam u Table Body?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

WHERE klauzula se odnosi na spoj te dve tabele. Dakle, praktično kao da je u pitanju potpuno nova tabela. Izvšri upiz bez WHERE klauzule čisto da vidiš šta dobijaš. Svakako, ukoliko dve tabele koje se spajaju imaju kolonu sa istim imenom, neophodno je navođenje kojoj tabeli pripada kolona koja se koristi u WHERE klauzuli. Obzirom da greška kaže da je kolona ForUser dvosmislena, to može da znači da u obe tabele postoji takva kolona, i DBMS ne može da razlikuje na koju se kolonu misli od te dve. Tako bi barem trebalo da bude, mada ne mogu da tvrdim da je tako i kod MySQL-a.

offline
  • Miljan Ilic
  • Pridružio: 18 Jun 2014
  • Poruke: 178

I kako da sada ja to sredim?
Tabela Fields ima: ID > ForUser > ForCategory > FieldName
Tabela Content ima: ID > ForUser > ForCategory > ForField > FieldContent
ID je nebitan jer je AUTO_INCREMENT. ForUser, ForCategory moraju biti zajednicki za obe tabele. Pozz

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

Dr.Cooler ::ForUser, ForCategory moraju biti zajednicki za obe tabele.Zajednički? Ili jednaki?
Dr.Cooler ::I kako da sada ja to sredim?Kao što rekoh, navedeš u upitu kojoj tabeli pripada kolona koju koristiš i to bi trebalo da bude to. Ovako nešto:
SELECT FieldName, <kolone_iz_druge_tabele> FROM Fields INNER JOIN Content ON Content.ForField = Fields.FieldName WHERE Fields.ForUser = '$User_Check' AND ForCategory = '$CategoryName';Inače, ko je projektovao ovu bazu? Kakva je kardinalnost veze? Čini se kao da ima dosta redundanse...

offline
  • Miljan Ilic
  • Pridružio: 18 Jun 2014
  • Poruke: 178

Napisano: 02 Jun 2015 18:15

Mislio sam na jednaki. Ja sam "projektovao" bazu, zato sad nista ne mogu da uklopim, a kad sam je pravio u glavi mi je bila dosta fleksibilna...

Dopuna: 02 Jun 2015 18:30

Ne moze ni sa drugim primerom koji si mi dao, nema gresaka ali ne izlistava kako treba, na slici je izlistano iz kategorije 'Otpornici' gde su polja 'Oznaka' i 'Tolerancija', izlistan je samo FieldName u Table Head.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

To je već druga stvar. Nisi ti sastavio ispravan upit, pa zato i ne dobijaš odgovarajuće rezultate. Generalno, jako je čudno to što i u jednoj i u drugoj tabeli ti čuvaš iste podatke (mislim na ForUser i ForCategory). Ako jedna vrsta tabele Content "pripada" jednom Field-u, onda je sasvim nepotrebno da i tu čuvaš ForUser i ForCategory, pošto podatke o tome već imaš u Field-u.

Svakako, cela ova struktura je dosta konfuzna i izvučena iz konteksta, pa ni meni nije lako da ispratim sve kako treba. Generalno, sa PHP-om nemam blage veze, ali je priroda problema vezana samo za bazu, tako bih mogao da pomognem ukoliko bi sve bilo predstavljeno vrlo detaljno i jasno.

Ko je trenutno na forumu
 

Ukupno su 1137 korisnika na forumu :: 34 registrovanih, 4 sakrivenih i 1099 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _Rade, A.R.Chafee.Jr., Ben Roj, BlekMen, bokisha253, Dimitrije Paunovic, Dogma21, Dorcolac, dozorni, draganca, GhostOfSparta480, Kubovac, KUZMAR, ladro, Libertas, marera, Mercury, Milan A. Nikolic, milenko crazy north, MiroslavD, mkukoleca, mnn2, Primus17, proka89, RED4G-304, robertino, Srle993, styg, VJ, wizzardone, zastavnik, ZetaMan, Zoca, 2001