Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SQL Query - pytanie
one_eddie
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 23.05.2003
Skąd: Polska

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


Robie skrypt, aby usprawnic obsluge mojej domowej prywatnej biblioteczki.
Czesto pozyczam ksiazki i zapominam o tym a znudzilo mi sie zapisywanie na karteczkach ktore czesto sie gubia.

Chcialem uzyskac wszystkie wypozyczone ksiazki przez dana osobe, pozyskac nazwy osoby ktora wypozyczyla oraz dane dokumentu oraz pare innych danych.

Napisalem takie zapytanie:

  1. SELECT le.Id, le.LendDate, DATEDIFF(CURDATE(), STR_TO_DATE(le.LendDate,'%d/%m/%Y')) AS LendDays, le.MaxLendTime, le.PersonId, p.SurName, p.ForeName, le.ItemID, d.Title, d.Author
  2. FROM lended le LEFT JOIN persons p , documents d ON (le.PersonId = p.Id AND d.Id = le.ItemId ) ORDER BY le.LendDate, LendDays;


Ale wyswietlalo niepoprawne wyniki:
Kod
+----+------------+----------+-------------+----------+---------+-----------+--------+------------------+---------+
| Id | LendDate   | LendDays | MaxLendTime | PersonId | SurName | ForeName  | ItemID | Title            | Author  |
+----+------------+----------+-------------+----------+---------+-----------+--------+------------------+---------+
|  7 | 26/07/2005 |        2 |          21 |        1 | Bl      | Krz       |      2 | Rozwijanie poj?? | Henryk  |
|  8 | 26/07/2005 |        2 |          14 |        1 | B       | K         |     12 | NULL             | NULL    |
|  7 | 26/07/2005 |        2 |          21 |        1 | B       | K         |      2 | NULL             | NULL    |
|  6 | 26/07/2005 |        2 |          14 |        2 | Bl      | Krz       |      1 | NULL             | NULL    |
|  6 | 26/07/2005 |        2 |          14 |        2 | B       | K         |      1 | Matematyka nauk? | W.W.Saw |
|  8 | 26/07/2005 |        2 |          14 |        1 | Bl      | Krz       |     12 | c++              | tony.l  |
+----+------------+----------+-------------+----------+---------+-----------+--------+------------------+---------+


Wiec poprawilem to tak

  1. SELECT le.Id, le.LendDate, DATEDIFF(CURDATE(), STR_TO_DATE(le.LendDate,'%d/%m/%Y')) AS LendDays, le.MaxLendTime, le.PersonId, p.SurName, p.ForeName, le.ItemID, d.Title, d.Author
  2. FROM lended le LEFT JOIN persons p , documents d ON (le.PersonId = p.Id AND d.Id = le.ItemId) WHERE d.Title!='' ORDER BY le.LendDate, LendDays;


Kod
+----+------------+----------+-------------+----------+---------+-----------+--------+---------+---------+
| Id | LendDate   | LendDays | MaxLendTime | PersonId | SurName | ForeName  | ItemID | Title   | Author  |
+----+------------+----------+-------------+----------+---------+-----------+--------+---------+---------+
|  6 | 26/07/2005 |        2 |          14 |        2 | B       | K         |      1 | Matemat | W.W.Saw |
|  7 | 26/07/2005 |        2 |          21 |        1 | Bl      | Krz       |      2 | Rozwija | Henryk  |
|  8 | 26/07/2005 |        2 |          14 |        1 | Bl      | Krz       |     12 | c++     | tony.l  |
+----+------------+----------+-------------+----------+---------+-----------+--------+---------+---------+


Pozbylem sie nuli ale chcialem jeszcze uzyskac dla konkretnej osoby a nie wszystkie wiec zrobilem tak:

  1. SELECT le.Id, le.LendDate, DATEDIFF(CURDATE(), STR_TO_DATE(le.LendDate,'%d/%m/%Y')) AS LendDays, le.MaxLendTime, le.PersonId, p.SurName, p.ForeName, le.ItemID, d.Title, d.Author
  2. FROM lended le LEFT JOIN persons p , documents d ON (le.PersonId = p.Id AND d.Id = le.ItemId) WHERE (d.Title!='' AND p.Id = 1) ORDER BY le.LendDate, LendDays;


Kod
+----+------------+----------+-------------+----------+---------+-----------+--------+--------+----------+
| Id | LendDate   | LendDays | MaxLendTime | PersonId | SurName | ForeName  | ItemID | Title  | Author   |
+----+------------+----------+-------------+----------+---------+-----------+--------+--------+----------+
|  7 | 26/07/2005 |        2 |          21 |        1 | Bl      | Krz       |      2 | Rozwij | Henryk M |
|  8 | 26/07/2005 |        2 |          14 |        1 | Bl      | Krz       |     12 | c++    | tony.l h |
+----+------------+----------+-------------+----------+---------+-----------+--------+--------+----------+


  1. SELECT le.Id, le.LendDate, DATEDIFF(CURDATE(), STR_TO_DATE(le.LendDate,'%d/%m/%Y')) AS LendDays, le.MaxLendTime, le.PersonId, p.SurName, p.ForeName, le.ItemID, d.Title, d.Author
  2. FROM lended le LEFT JOIN persons p , documents d ON (le.PersonId = p.Id AND d.Id = le.ItemId) WHERE (d.Title!='' AND p.Id = 2) ORDER BY le.LendDate, LendDays;


Kod
+----+------------+----------+-------------+----------+---------+----------+--------+-----------+---------+
| Id | LendDate   | LendDays | MaxLendTime | PersonId | SurName | ForeName | ItemID | Title     | Author  |
+----+------------+----------+-------------+----------+---------+----------+--------+-----------+---------+
|  6 | 26/07/2005 |        2 |          14 |        2 | B       | K        |      1 | Matematyk | W.W.Sar |
+----+------------+----------+-------------+----------+---------+----------+--------+-----------+---------+


No ale zapytanie zrobilo sie kolosalne i malo czytelne. Pozatym watpie czy bedzie dzialac poprawnie jesli zabraknie ktorejs z danych.

Macie jakis pomysl jak to zapisac inaczej?
Bede wdzieczny za kazda pomoc :]


--------------------
Potrzebujesz oprogramowania dla firmy lub do użytku prywatnego? Zajrzyj na http://www.virgotech.pl
Sklep z gotowymi programami, grami oraz kodami źródłowymi. Zajrzyj na http://www.sklep.virgotech.pl
Go to the top of the page
+Quote Post

Posty w temacie
- one_eddie   SQL Query - pytanie   28.07.2005, 14:00:50
- - popbart   [SQL] pobierz, plaintext SELECT le.Id, le.LendDate...   29.07.2005, 16:28:20


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 Aktualny czas: 21.08.2025 - 08:20