Po wielu godzinach kombinowania poddaję się i zapytam na forum. Mam 5 tabel w bazie. 5 zawiera klucze z relacją do 4 pozostałych, czyli jest relacja Many To One. Za pomocą pętli foreach iteruje sobie po tablicy i wyświetlam wyniki. Stanąłem na zliczaniu wyników pętli foreach.
W przypadku takim:
echo '<ul>';
foreach($stmt as $row)
echo '<li>'.$row['nazwa_branzy'].': '.$row['rodzaj_umowy'].': '.$row['login'].': '.$row['tresc'].': '.$row['lokalizacja'].': '.$row['date'].'</li>';
$stmt->closeCursor();
echo '</ul>';
Wszystko działa elegancko. No ale należy też dodać wyjątek jeśli zapytanie nic nie znajdzie. No i się zaczyna. Wystarczy, że dodam do kodu:
echo '<ul>';
foreach($stmt as $row)
$result = count($row);
echo $result;
echo '<li>'.$row['nazwa_branzy'].': '.$row['rodzaj_umowy'].': '.$row['login'].': '.$row['tresc'].': '.$row['lokalizacja'].': '.$row['date'].'</li>';
$stmt->closeCursor();
echo '</ul>';
I wynikiem $result jest "12" gdy znalazł jeden rekord. "1212" gdy znalazł dwa rekordy. Gdy tylko dodałem te dwie linijki, przy istnieniu 2 rekordów o wybranych parametrach, wyświetla mi się tylko jeden rekord. Gdyby ktoś mógłby mi pomóc bo mi już witki opadają :(
Dla większej jasności wrzucam wygląd przykładowego zapytania:
SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja, o.date FROM ogloszenia AS o LEFT JOIN users u ON u.id_usera = o.id_usera LEFT JOIN branza b ON b.id_branzy = o.id_branzy LEFT JOIN umowa i ON i.id_umowy = o.id_umowy LEFT JOIN lokalizacja l ON l.id_lok = o.id_lok WHERE rodzaj_umowy = :rodzaj_umowy
Co ciekawe, print_r($row) wyrzuca dobrą wartość dwóch tablic:
Array ( [nazwa_branzy] => elektromechanik [0] => elektromechanik [login] => admin [1] => admin [tresc] => Potrzebny elektromechanik od zaraz [2] => Potrzebny elektromechanik od zaraz [rodzaj_umowy] => umowa o prace [3] => umowa o prace [lokalizacja] => Opole [4] => Opole [date] => 2016-01-26 23:13:18 [5] => 2016-01-26 23:13:18 ) Array ( [nazwa_branzy] => elektromechanik [0] => elektromechanik [login] => admin [1] => admin [tresc] => Elektromechanik na umowe zlecenie [2] => Elektromechanik na umowe zlecenie [rodzaj_umowy] => umowa zlecenie [3] => umowa zlecenie [lokalizacja] => Opole [4] => Opole [date] => 2016-01-26 23:13:18 [5] => 2016-01-26 23:13:18 )
oraz cały kod:
if(isset($_GET['nazwa']))
{
if($_GET['nazwa'] !== "Branża" || $_GET['umowa'] || $_GET['lokalizacja'])
{
$mapping = array(
'nazwa' => 'nazwa_branzy',
'lokalizacja' => 'lokalizacja',
'umowa' => 'rodzaj_umowy'
);
$where = array();
$params = array();
$wh = array();
foreach($_GET as $key => $value)
{
if(isset($mapping[$key]) && '' !== $value)
{
$where[] = $mapping[$key].' = :'.$mapping[$key];
$params[':'.$mapping[$key]] = $value;
}
}
if(!empty($where))
{
$wh = 'WHERE '.implode(' AND ', $where);
//print_r($wh);
}
else {echo "Nie zaznaczono żadnego pola"; die;}
try
{
$pdo = new PDO($pol, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT b.nazwa_branzy, u.login, o.tresc, i.rodzaj_umowy, l.lokalizacja, o.date FROM ogloszenia AS o
LEFT JOIN users u ON u.id_usera = o.id_usera
LEFT JOIN branza b ON b.id_branzy = o.id_branzy
LEFT JOIN umowa i ON i.id_umowy = o.id_umowy
LEFT JOIN lokalizacja l ON l.id_lok = o.id_lok '.$wh;
print_r($sql);
$stmt = $pdo->prepare($sql);
if(!empty($_GET['nazwa'])) {$stmt -> bindValue(':nazwa_branzy', $_GET['nazwa'], PDO::PARAM_STR);}
if(!empty($_GET['umowa'])) {$stmt -> bindValue(':rodzaj_umowy', $_GET['umowa'], PDO::PARAM_STR);}
if(!empty($_GET['lokalizacja'])) {$stmt -> bindValue(':lokalizacja', $_GET['lokalizacja'], PDO::PARAM_STR);}
//if(empty($_GET['nazwa']) && empty($_GET['nazwa']) && empty($_GET['nazwa'])) {echo "Nie wybrano filtrów"; die;}
$stmt -> execute($params);
//if($where = '') echo "Nic nie znaleziono";
echo '<ul>';
foreach($stmt as $row)
$result = count($row);
echo $result;
echo '<li>'.$row['nazwa_branzy'].': '.$row['rodzaj_umowy'].': '.$row['login'].': '.$row['tresc'].': '.$row['lokalizacja'].': '.$row['date'].'</li>';
$stmt->closeCursor();
echo '</ul>';
}
catch(PDOException $e)
{
echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
}
}
}
HELP!!!