|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
[PHP] Algoritmo per Aste al ribasso
Ciao, sto cercando di creare un piccolo script per le aste al ribasso, ma non so' come rendere l'algoritmo il più veloce possibile.
L'argotimo deve vedere se l'offerta dell'utente ($user_bid) è l'offerta unica più bassa presente nel db. Il db è strutturato così: id | user_bid | item | bid |
|
|
|
|
|
#2 | |
|
Junior Member
Iscritto dal: May 2006
Città: cosenza
Messaggi: 14
|
Ciao!
A quanto ho capito a funzione che vuoi creare dato un $user_id e un codice oggetto $item a cui l'utente ha fatto un offerta deve restituire true se è l'unica è più bassa e false altrimenti... Quote:
Il problema è solo quello di interrogare il db in maniera opportuna. Potresti impostare la funzione così: Codice PHP:
Per semplificare la query potresti ricorrere all'uso delle viste. |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
In un'altro forum mi hanno suggerito questa query:
SELECT count(id) AS tot, * FROM table GROUP BY user_bid, bid HAVING tot=1 ORDER BY bid LIMIT 1 Quale delle due potrebbe essere più soddisfacente? |
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
Quote:
Non potrei magari estrarre tutte le offerte per quel determinato oggetto, scartare quelle che non sono uniche, ordinarle per grandezza, e aggiungere LIMIT 1 ? Il problema è se c'è un modo per scartare quelle che non sono uniche. Ultima modifica di x3d0 : 12-10-2008 alle 14:46. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Parma GialloBlu
Messaggi: 450
|
e fare una quesry di tutte le offerte per l'oggetto &item_id ordinata per prezzo dal più basso al più alto e poi confrontare il primo valore della query con quello inserito dall'utente???
SELECT user_bid FROM bid WHERE item = $item_id ORDER BY user_bid ASC LIMIT 1 |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
Quote:
|
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
up
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: May 2006
Città: cosenza
Messaggi: 14
|
ciao x3d0,
stimolato dalla questione ho creato un db di esempio con 3 tabelle così fatte: bids(id,userId, itemId,bid); //tabella delle offerte users(id,name ) //tabella utenti items(id,descr) //tabella degli oggetti L' sql del db lo trovi nel file allegato. Su questa dase di dati la query che funge è questa: Codice:
SELECT * FROM bids B, users U, items I WHERE B.userId = U.id AND I.id = B.itemId AND I.id = 1 AND B.bid <= ALL(SELECT bid FROM bids WHERE itemId = B.itemId ) GROUP BY B.userId HAVING count(*) = 1 ORDER BY bid ASC; |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
Ho sostituito i campi con quelli del mio db ma appena mando in esecuzione la query mi va in loop mysql (carica...carica...e niente...)
edit: Sono riuscito ad eseguire la query, ma pultroppo mi ha restituito le prime due offerte (inserite nel db) con bid più basse e non uniche. Ultima modifica di x3d0 : 15-10-2008 alle 23:22. |
|
|
|
|
|
#10 | |
|
Junior Member
Iscritto dal: May 2006
Città: cosenza
Messaggi: 14
|
Quote:
...cmq con la base di dati che ti ho allegato, almeno sul mio pc funziona. Che versione di Mysql stai usando? Io ho usato mysql 5. |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
Ciao,
funziona tutto correttamente. Grande! Senti e per vedere se è semplicemente unica o per contare quante ce ne sono state della stessa somma? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:16.




















