Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] kłopot z SELECT GROUP_CONCAT
kowal1029
post 13.08.2014, 20:49:29
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.08.2014

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


Witam
Próbuję zaadoptować na swoje potrzeby projekt sklepu internetowego z książki, ale co chwile napotykam jakieś błędy. Z tym jednak nie umiem sobie poradzić, gdy chcę przeszukać bazę danych z poziomu sklepu na ekaranie napotykam taki błąd:

Odrzucone zapytanie: funkcja showItem: SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, Tytuł, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, Ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.WydawnictwoId = Wydawnictwa.Id AND KsiazkiAutorzy.`KsiążkaId` = Ksiazki.Id AND KsiazkiAutorzy.AutorId = Autorzy.Id AND LOCATE('dsdsd', `autorzy`.`nazwa`) <> 0 AND LOCATE('sdfcsdfsd', `tytuł`) <> 0 GROUP BY Ksiazki.Id

kod programu:


Kod
include "sklep_db_functions.php";

function search($autor, $tytul)
{
  if(!makeDBConnection()){
    return false;
  }

  if($autor == '' && $tytul == ''){
    return false;
  }
  else if($autor == ''){
    $where = "LOCATE('$tytul', `tytuł`) <> 0 ";
  }
  else if($tytul == ''){
    $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 ";
  }
  else{
    $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 AND ";
    $where .= "LOCATE('$tytul', `tytuł`) <> 0 ";
  }

  $query = "SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, Tytuł, ISBN, Wydawnictwa.Nazwa ";
  $query .= "AS Wydawnictwo, Cena, Ksiazki.Id AS Id ";
  $query .= "FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy ";
  $query .= "WHERE Ksiazki.WydawnictwoId = Wydawnictwa.Id AND ";
  $query .= "KsiazkiAutorzy.`KsiążkaId` = Ksiazki.Id AND ";
  $query .= "KsiazkiAutorzy.AutorId = Autorzy.Id AND ";
  $query .= $where;
  $query .= "GROUP BY Ksiazki.Id";


z góry dziękuję za pomoc
Go to the top of the page
+Quote Post
ActivePlayer
post 13.08.2014, 20:52:43
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


a jaki błąd zapytania dostajesz?

spróbuj to zapytanie wykonać poprzez phpmyadmin.
Go to the top of the page
+Quote Post
kowal1029
post 13.08.2014, 20:59:40
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.08.2014

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


błąd jest tak jak pisałem

Cytat
Odrzucone zapytanie: funkcja showItem: SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, Tytuł, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, Ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.WydawnictwoId = Wydawnictwa.Id AND KsiazkiAutorzy.`KsiążkaId` = Ksiazki.Id AND KsiazkiAutorzy.AutorId = Autorzy.Id AND LOCATE('dsdsd', `autorzy`.`nazwa`) <> 0 AND LOCATE('sdfcsdfsd', `tytuł`) <> 0 GROUP BY Ksiazki.Id
Go to the top of the page
+Quote Post
ActivePlayer
post 13.08.2014, 21:03:09
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


wklej to zapytanie do phpmyadmin i zobaczysz faktyczny błąd. Teraz nie masz informacji o tym jaki jest błąd, tylko o tym że on istnieje i że dane zapytanie nie wykonuje się poprawnie. Składniowo na pierwszy rzut oka wygląda okey, więc trzeba zobaczyć konkretniej na czym polega.
Go to the top of the page
+Quote Post
kowal1029
post 13.08.2014, 21:29:07
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.08.2014

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


Wrzuciłem do phpmyadmin, pozmieniałem troche w zapytaniu bo nazwy kolumn w tabelach różniły się nieco od tych w zapytaniu, ostatecznie wygląda to tak
Cytat
SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, tytul, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.Wydawnictwo_Id = Wydawnictwa.Id AND KsiazkiAutorzy.'Ksiazka_Id' = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND LOCATE('dsdsd', `autorzy`.`nazwa`) <> 0 AND LOCATE('sdfcsdfsd', `tytuł`) <> 0 GROUP BY Ksiazki.Id


teraz mam taki błąd
Cytat
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Ksiazka_Id' = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND LOCATE('d' at line 1


Zaczynam dopiero z php i myslq, czy generalnie może to być wina źle ponazywanych kolumn?
Go to the top of the page
+Quote Post
slash^
post 13.08.2014, 21:35:39
Post #6





Grupa: Zarejestrowani
Postów: 278
Pomógł: 36
Dołączył: 9.04.2003
Skąd: Płock

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


Nazwy kolumn bierz w apostrofy `kolumna` a nie cudzyslowia 'kolumna'.


--------------------
d(^^)b
Go to the top of the page
+Quote Post
kowal1029
post 13.08.2014, 22:15:36
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.08.2014

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


Zmieniłem te apostrofy teraz kod wygląda tak:
Cytat
SELECT GROUP_CONCAT( Autorzy.Nazwa ) AS Autor, tytul, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, ksiazki.Id AS Id
FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy
WHERE Ksiazki.Wydawnictwo_Id = Wydawnictwa.Id
AND KsiazkiAutorzy.`Ksiazka_Id` = ksiazki.Id
AND KsiazkiAutorzy.Autor_Id = Autorzy.Id
AND LOCATE( 'Adam Mickiewicz', `autorzy`.`nazwa` ) <>0
AND LOCATE( 'Pan Tadeusz', `tytul` ) <>0
GROUP BY Ksiazki.Id
LIMIT 0 , 30


W phpmyadmin wszystko działa zaznacza wybraną książke, ale na stroni jest cały czas ten sam błąd, chyba że wrzuce kod razem z tym AND LOCATE... to wtedy wyświetla w tabeli wybraną pozycję
Go to the top of the page
+Quote Post
Michael2318
post 14.08.2014, 00:57:19
Post #8





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Dodaj do tej funkcji w PHP na końcu:

  1. return $query;


I wywołaj gdzieś tą funkcję w ten sposób:

  1. var_dump(search($autor, $tytul));


i pokaż jak to zapytanie wygląda w PHP finalnie.

Ten post edytował Michael2318 14.08.2014, 00:57:50
Go to the top of the page
+Quote Post
kowal1029
post 14.08.2014, 06:28:57
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.08.2014

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


O takie coś chodzi? Na końcu jest ten return i var_dump
Kod
function search($autor, $tytul)
{
  if(!makeDBConnection()){
    return false;
  }

  if($autor == '' && $tytul == ''){
    return false;
  }
  else if($autor == ''){
    $where = "LOCATE('$tytul', `tytuł`) <> 0 ";
  }
  else if($tytul == ''){
    $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 ";
  }
  else{
    $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 AND ";
    $where .= "LOCATE('$tytul', `tytuł`) <> 0 ";
  }

  $query = "SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, tytul, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.Wydawnictwo_Id = Wydawnictwa.Id AND KsiazkiAutorzy.`Ksiazka_Id` = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND GROUP BY Ksiazki.Id";


  if(!$result = mysql_query($query)){
    echo("Odrzucone zapytanie: funkcja showItem: $query");
    return false;
  }

  echo("<table border='1' align='center'>");
  echo("<tr><td align='center' colspan='6'>Wyniki wyszukiwania</td></tr>");
  echo("<tr>");
  echo("<td>Tytuł</td>");
  echo("<td>Autor</td>");
  echo("<td>ISBN</td>");
  echo("<td>Wydawnictwo</td>");
  echo("<td>Cena</td>");
  echo("<td>Dodaj</td>");
  echo("</tr>");

  while($arr = mysql_fetch_array($result)){
    echo("<tr>");
    echo("<td>");
    echo("<a href='main.php?action=showitem&id=$arr[Id]'>$arr[Tytuł]</a>");
    echo("</td>");
    echo("<td>$arr[Autor]</td>");
    echo("<td>$arr[ISBN]</td>");
    echo("<td>$arr[Wydawnictwo]</td>");
    echo("<td>$arr[Cena]</td>");
    echo("<td>");
    echo("<a href='main.php?action=atb&id=$arr[Id]'>Do koszyka</a>");
    echo("</td>");
    echo("</tr>");
  }
  echo("</table>");
  return $query;
  var_dump(search($autor, $tytul));
  }


Ale cały czas ten sam błąd
Go to the top of the page
+Quote Post
Pyton_000
post 14.08.2014, 08:07:39
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


przed tym
Kod
echo("Odrzucone zapytanie: funkcja showItem: $query");

daj
  1. echo mysql_error();die();
Go to the top of the page
+Quote Post
aniolekx
post 14.08.2014, 08:28:46
Post #11





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


tak to jest z gównianymi książkami.

Po pierwsze nie widzę abyś dodawał zmienna $where do $query

zaraz za query zrób (chyba o to chudziło koledze powyżej):
Kod
die(var_dump($query));




Poza tym samo zapytanie jest cholernie nieczytelne, używasz wielkich znaków (w tym polskich) i kiepskiego łączenia tabel, już nawet zapomniałem ze tak można.

w tym ostatnim LOCATE masz polski znak (tytuł), a kiedy wybierasz ta sama kolumnę w selekcie już polskiego znaku nie masz.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 5.07.2025 - 08:47